0
class Boo {
    public int a = 3;

    public void addFive() {
        a += 5; 
        System.out.print("f "); 
    }
}

class Bar extends Boo {
    public int a = 8;
    public void addFive() { 
        this.a += 5;
        System.out.print("b " ); 
}

public static void main(String[] args) {
    Boo f = new Bar();
    f.addFive();
    System.out.println(f.a);
}
4

3 に答える 3

3

インスタンス フィールドは上書きせず、非表示にするだけです。したがって、参照のインスタンス フィールドにアクセスすると、クラスでBoo宣言されたもののみが取得されます。Boo

そしてaBarコンストラクターで をインクリメントすると、次のようになります。

this.a += 5;

で宣言されたフィールドを隠しているため、 でa宣言されたをインクリメントしています。BaraBoo

于 2013-02-09T22:10:40.403 に答える
1

使ったからBoo

Boo f=new Bar();

参照とフィールドは多態的ではありません

于 2013-02-09T22:10:05.533 に答える
0

aBarのフィールドは、Booのシャドウフィールドです。aこれは別のフィールドですが、名前が同じであるためsuper.a、Bar からアクセスするには Boo のフィールドを参照する必要があります。

この前の質問は、シャドーイングをよくカバーしています。

于 2013-02-09T22:12:58.170 に答える