次のスーパークラスとサブクラスのペアを考えてみましょう。スーパークラス メンバーにどのようにアクセスしますか?
class Super {
Number aNumber;
}
class Subbie extends Super {
Float aNumber;
}
super.aNumber
サブクラスのインスタンスであれば、スーパー メンバーにアクセスできます。
属性に可視性修飾子がない場合、パッケージ プライベートであると見なされます。は、同じパッケージ内にある場合にSubbie
のみ にアクセスできSuper
ます。aNumber
そうであれば、次のようにアクセスできますsuper.aNumber
。super
ここにスーパークラスを暗示的に参照するキーワードがあり、名前が付けられたスーパークラスとは何の関係もないことに注意してくださいSuper
。
class Super {
Number aNumber;
}
class Subbie extends Super {
Float aNumber;
public Number getNumberFromSuper() {
return super.aNumber;
}
}
たとえば、オンラインで優れた Java チュートリアルを読むことをお勧めします。
アクセス修飾子と呼ばれるさまざまなキーワードでフィールドを定義できます(このトピックの詳細な説明については、最後のリンクを確認してください)。それぞれがアクセス/使用の範囲を定義します。この説明では、フィールドに焦点を当てます。
パブリック:誰でもアクセスできます。このアクセス修飾子は、フィールドではなくメソッドで定期的に使用されます。Java では、フィールドの値にアクセスして (それぞれ) 変更するために メソッドget
とメソッドを使用することが推奨されています。set
次の方法でフィールドにアクセスできます。
AClass c = new AClass();
c.publicField = 3; //Setting a value in a field, int in this case
int sum = c.publicField + 4; //Obtaining the value of publicField to use it
プライベート:フィールドをプライベートとして定義すると、そのフィールドはクラス自体にのみ表示されます。つまり、クラスの境界の外にいる誰もそのフィールドを見ることができません。Java の共通クラスには通常、プライベート フィールドとアクセサー ( get
&set
メソッド) があります。
public class AClass {
public int publicField;
private String privateField = "Can't see me!";
public String getPrivateField() {
return privateField;
}
public void setPrivateField(String newValue) {
privateField = newVaule;
}
}
ゲッターとセッターを使用すると、プライベート フィールドへのアクセスを制御できます。これにより、フィールドの値を更新する前に、または必要に応じて値を返す前に特定のフィールドを準備する前に、必要なロジックを実行できます。
保護:クラスのサブクラスおよび同じパッケージ内のクラスのみが、このキーワードで定義されたフィールドにアクセスできます。あなたの場合Subbie
、protected
フィールドSuper
と同じパッケージ内の他のクラスにSuper
アクセスでき、それらのフィールドにもアクセスできます。
アクセス修飾子なし:これは現在のケースであり、質問に対する答えはクラスの構造に大きく依存しています。Super
それらが同じパッケージにある場合、から のフィールドにアクセスできますSubbie
。それ以外の場合、Subbie
が別のパッケージにある場合、そのフィールドにアクセスできません。このフィールドはPackage-Privateとして参照されます。
あなたがチェックしたいかもしれないいくつかの関連記事: