-2

次のスーパークラスとサブクラスのペアを考えてみましょう。スーパークラス メンバーにどのようにアクセスしますか?

class Super { 
    Number aNumber; 
} 

class Subbie extends Super { 
    Float aNumber; 
}
4

3 に答える 3

0

super.aNumberサブクラスのインスタンスであれば、スーパー メンバーにアクセスできます。

于 2012-10-16T12:36:15.577 に答える
0

属性に可視性修飾子がない場合、パッケージ プライベートであると見なされます。は、同じパッケージ内にある場合にSubbieのみ にアクセスできSuperます。aNumber

そうであれば、次のようにアクセスできますsuper.aNumbersuperここにスーパークラスを暗示的に参照するキーワードがあり、名前が付けられたスーパークラスとは何の関係もないことに注意してくださいSuper

class Super { 
    Number aNumber; 
} 

class Subbie extends Super { 
    Float aNumber; 
    public Number getNumberFromSuper() { 
        return super.aNumber;
    }
}

たとえば、オンラインで優れた Java チュートリアルを読むことをお勧めします。

于 2012-10-16T12:37:16.697 に答える
0

アクセス修飾子と呼ばれるさまざまなキーワードでフィールドを定義できます(このトピックの詳細な説明については、最後のリンクを確認してください)。それぞれがアクセス/使用の範囲を定義します。この説明では、フィールドに焦点を当てます。

パブリック:誰でもアクセスできます。このアクセス修飾子は、フィールドではなくメソッドで定期的に使用されます。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;
    }

}

ゲッターとセッターを使用すると、プライベート フィールドへのアクセスを制御できます。これにより、フィールドの値を更新する前に、または必要に応じて値を返す前に特定のフィールドを準備する前に、必要なロジックを実行できます。

保護:クラスのサブクラスおよび同じパッケージ内のクラスのみが、このキーワードで定義されたフィールドにアクセスできます。あなたの場合SubbieprotectedフィールドSuperと同じパッケージ内の他のクラスにSuperアクセスでき、それらのフィールドにもアクセスできます。

アクセス修飾子なし:これは現在のケースであり、質問に対する答えはクラスの構造に大きく依存しています。Superそれらが同じパッケージにある場合、から のフィールドにアクセスできますSubbie。それ以外の場合、Subbieが別のパッケージにある場合、そのフィールドにアクセスできません。このフィールドはPackage-Privateとして参照されます。

あなたがチェックしたいかもしれないいくつかの関連記事:

  1. Java での継承
  2. クラスのメンバーへのアクセスの制御
于 2012-10-16T13:05:59.407 に答える