Java アクセス修飾子
Java アクセス修飾子
このチュートリアルでは、Java アクセス修飾子、そのタイプ、および例を使用してそれらを使用する方法について学習します。
アクセス修飾子とは?
Java では、アクセス修飾子を使用して、クラス、インターフェイス、変数、メソッド、コンストラクター、データ メンバー、およびセッター メソッドのアクセシビリティ (可視性) を設定します。たとえば、
class Animal {
public void method1() {...}
private void method2() {...}
}
上記の例では、method1() と method2() の 2 つのメソッドを宣言しています。ここで、
- メソッド1
public
です - これは、他のクラスからアクセスできることを意味します。 - メソッド2
private
です - これは、他のクラスからアクセスできないことを意味します。
キーワード public
に注意してください と private
.これらは Java のアクセス修飾子です。これらは、可視性修飾子としても知られています。
注意 :ゲッター メソッドのアクセス修飾子を設定することはできません。
アクセス修飾子の種類
アクセス修飾子の種類について学ぶ前に、Java パッケージについて知っておく必要があります。
Java には 4 つのアクセス修飾子キーワードがあり、それらは次のとおりです。
修飾子 | 説明 |
デフォルト | 宣言はパッケージ内でのみ表示されます (パッケージ プライベート) |
非公開 | 宣言はクラス内でのみ表示されます |
保護 | 宣言はパッケージまたはすべてのサブクラス内で表示されます |
公開 | 宣言はどこにでも表示されます |
デフォルトのアクセス修飾子
クラス、メソッド、変数などのアクセス修飾子を明示的に指定しない場合、デフォルトでデフォルトのアクセス修飾子が考慮されます。たとえば、
package defaultPackage;
class Logger {
void message(){
System.out.println("This is a message");
}
}
ここでは、ロガー クラスにはデフォルトのアクセス修飾子があります。そして、クラスは defaultPackage に属するすべてのクラスに表示されます パッケージ。ただし、Logger を使用しようとすると クラスが defaultPackage 以外の別のクラスにある場合、コンパイル エラーが発生します。
プライベート アクセス修飾子
変数とメソッドが宣言されている場合 private
、クラス外からアクセスすることはできません。たとえば、
class Data {
// private variable
private String name;
}
public class Main {
public static void main(String[] main){
// create an object of Data
Data d = new Data();
// access private variable and field from another class
d.name = "Programiz";
}
}
上記の例では、name という名前のプライベート変数を宣言しました。 display()
という名前のプライベート メソッド .プログラムを実行すると、次のエラーが表示されます:
Main.java:18: error: name has private access in Data
d.name = "Programiz";
^
プライベート変数と Data のプライベート メソッドにアクセスしようとしているため、エラーが生成されます。 Main のクラス クラス。
これらのプライベート変数にアクセスする必要がある場合はどうすればよいか疑問に思うかもしれません。この場合、ゲッターとセッターのメソッドを使用できます。たとえば、
class Data {
private String name;
// getter method
public String getName() {
return this.name;
}
// setter method
public void setName(String name) {
this.name= name;
}
}
public class Main {
public static void main(String[] main){
Data d = new Data();
// access the private variable using the getter and setter
d.setName("Programiz");
System.out.println(d.getName());
}
}
出力 :
The name is Programiz
上記の例では、name という名前のプライベート変数があります。 .外部クラスから変数にアクセスするために、メソッドを使用しました:getName()
と setName()
.これらのメソッドは、Java では getter および setter と呼ばれます。
ここでは、setter メソッド (setName()
) を使用しました。 ) 変数と getter メソッドに値を代入します (getName()
) 変数にアクセスします。
this
を使用しました setName() 内のキーワードを使用して、クラスの変数を参照します。このキーワードの詳細については、Java this Keyword をご覧ください。
注意 :Java では、クラスとインターフェースを private と宣言することはできません。ただし、ネストされたクラスは非公開として宣言できます。詳細については、Java のネストされた内部クラスを参照してください。
保護されたアクセス修飾子
メソッドとデータメンバーが宣言されている場合 protected
、同じパッケージ内およびサブクラスからアクセスできます。たとえば、
class Animal {
// protected method
protected void display() {
System.out.println("I am an animal");
}
}
class Dog extends Animal {
public static void main(String[] args) {
// create an object of Dog class
Dog dog = new Dog();
// access protected method
dog.display();
}
}
出力 :
I am an animal
上記の例では、display()
という名前の保護されたメソッドがあります。 動物の中 クラス。 動物 クラスは Dog によって継承されます クラス。継承の詳細については、Java 継承にアクセスしてください。
次にオブジェクト dog を作成しました 犬の クラス。オブジェクトを使用して、親クラスの保護されたメソッドにアクセスしようとしました。
保護されたメソッドは子クラスからアクセスできるため、Animal のメソッドにアクセスできます。 犬のクラス クラス。
注意 :クラスやインターフェースを宣言することはできません protected
パブリック アクセス修飾子
メソッド、変数、クラスなどを宣言する場合 public
、どこからでもアクセスできます。 public アクセス修飾子には、スコープの制限はありません。たとえば、
// Animal.java file
// public class
public class Animal {
// public variable
public int legCount;
// public method
public void display() {
System.out.println("I am an animal.");
System.out.println("I have " + legCount + " legs.");
}
}
// Main.java
public class Main {
public static void main( String[] args ) {
// accessing the public class
Animal animal = new Animal();
// accessing the public variable
animal.legCount = 4;
// accessing the public method
animal.display();
}
}
出力 :
I am an animal. I have 4 legs.
ここで、
- パブリック クラス Animal メインからアクセスされます クラス。
- パブリック変数 legCount メインからアクセスされます クラス。
- 公開メソッド
display()
メインからアクセスされます クラス。
1 つの図にまとめられたアクセス修飾子
<図>アクセス修飾子は、主にカプセル化に使用されます。プログラムのどの部分がクラスのメンバーにアクセスできるかを制御するのに役立ちます。そのため、データの悪用を防ぐことができます。カプセル化の詳細については、Java カプセル化にアクセスしてください。
Java