Javaのアクセス修飾子
3292 ワード
Javaのアクセス修飾子は、変数、メソッド、コンストラクション関数、またはクラスのアクセス性(範囲)を定義します.Javaには4種類のアクセス修飾子があります. Public Private Protected Default
デフォルトの修飾子を明確に使用する必要はありません.Public、Private、Protectedを指定しない場合、JVMはデフォルトの修飾子を使用します.
Public修飾子
Public修飾子は、任意のJavaクラスにアクセスできることを示します.クラスをpublicに設定すると、クラスはどこでも使用できます.次の例を見てみましょう. orgの下にA.javaというクラス を作成します. orgの下にB.javaというクラス を作成します.
上記のプログラムを実行すると、次の出力結果が得られます.
In method of class A Value of variable a is: 30
Private修飾子
Privateアクセス修飾子はクラス内でのみアクセスできます.クラスをネストしない限りprivateクラスとprotectedクラスは使用できません.例を見てみましょう
クラスBがクラスAのプライベート変数やメソッドにアクセスできないため、20行目と21行目でコンパイルエラーが発生します.
デフォルトの修飾子
アクセス権を設定しない場合は、JVMはデフォルトのアクセス権と見なします.デフォルトのアクセス修飾子を使用すると、現在のクラスパッケージ以外のクラスは、そのクラスのメソッド、変数、またはクラスにアクセスできません. orgにDefaultAccess.javaというクラス を作成する comにB.javaというクラス を作成する.
上記クラスBでは、パッケージ「org」の外でクラスDefaultAccessの変数aとメソッドmethodAにアクセスしようとしたため、9行目と10行目でコンパイルエラーが発生します.
Protected修飾子
Protectedアクセス修飾子は、同じパッケージまたはパッケージの外に継承することによってのみアクセスできます.例を見てみましょう comにProtectA.javaというクラス を作成 orgにProtectB.javaというクラス を作成する
上記のプログラムを実行すると、次の出力結果が得られます.
In method of class A Value of variable a is: 20
ご覧のように、ProtectAにアクセスする変数aとmethodAを継承することができます.
デフォルトの修飾子を明確に使用する必要はありません.Public、Private、Protectedを指定しない場合、JVMはデフォルトの修飾子を使用します.
Public修飾子
Public修飾子は、任意のJavaクラスにアクセスできることを示します.クラスをpublicに設定すると、クラスはどこでも使用できます.次の例を見てみましょう.
package org;
public class A {
public int a;
public A(int a) {
this.a = a;
}
public void methodA() {
System.out.println("In method of class A");
}
}
package org;
import org.A;
public class B {
public static void main(String args[]) {
A objA = new A(30);
objA.methodA();
System.out.println("Value of variable a is: " + objA.a);
}
}
上記のプログラムを実行すると、次の出力結果が得られます.
In method of class A Value of variable a is: 30
Private修飾子
Privateアクセス修飾子はクラス内でのみアクセスできます.クラスをネストしない限りprivateクラスとprotectedクラスは使用できません.例を見てみましょう
package org;
public class A {
private int a;
public A(int a) {
this.a = a;
}
private void methodA() {
System.out.println("In method of class A");
}
}
public class B {
public static void main(String args[]) {
A objA = new A(30);
objA.methodA(); // 20
System.out.println("Value of variable a is: " + objA.a); // 21
}
}
クラスBがクラスAのプライベート変数やメソッドにアクセスできないため、20行目と21行目でコンパイルエラーが発生します.
デフォルトの修飾子
アクセス権を設定しない場合は、JVMはデフォルトのアクセス権と見なします.デフォルトのアクセス修飾子を使用すると、現在のクラスパッケージ以外のクラスは、そのクラスのメソッド、変数、またはクラスにアクセスできません.
package org;
public class DefaultAccess {
int a;
public DefaultAccess(int a) {
this.a = a;
}
void methodA() {
System.out.println("In method of class A");
}
}
package com;
import org.DefaultAccess;
public class B {
public static void main(String args[]) {
DefaultAccess obj = new DefaultAccess(20);
obj.methodA(); // 9
System.out.println("Value of variable a is: " + obj.a); // 10
}
}
上記クラスBでは、パッケージ「org」の外でクラスDefaultAccessの変数aとメソッドmethodAにアクセスしようとしたため、9行目と10行目でコンパイルエラーが発生します.
Protected修飾子
Protectedアクセス修飾子は、同じパッケージまたはパッケージの外に継承することによってのみアクセスできます.例を見てみましょう
package com;
public class ProtectA {
protected int a;
protected ProtectA(int a){
this.a=a;
}
protected void methodA() {
System.out.println("In method of class A");
}
}
package org;
import com.ProtectA;
public class ProtectB extends ProtectA {
ProtectB(int a) {
super(a);
}
public static void main(String args[]) {
ProtectB objB = new ProtectB(20);
objB.methodA();
System.out.println("Value of variable a is: " + objB.a);
}
}
上記のプログラムを実行すると、次の出力結果が得られます.
In method of class A Value of variable a is: 20
ご覧のように、ProtectAにアクセスする変数aとmethodAを継承することができます.