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);
}
java - オーバーライドされたメソッド addFive() を呼び出すと、b が Bar オブジェクトとして出力されますが、Boo Class.Output で「a」を呼び出す理由は b3 です。
質問する
73 次
3 に答える
3
インスタンス フィールドは上書きせず、非表示にするだけです。したがって、参照のインスタンス フィールドにアクセスすると、クラスでBoo
宣言されたもののみが取得されます。Boo
そしてa
、Bar
コンストラクターで をインクリメントすると、次のようになります。
this.a += 5;
で宣言されたフィールドを隠しているため、 でa
宣言されたをインクリメントしています。Bar
a
Boo
于 2013-02-09T22:10:40.403 に答える
1
使ったからBoo
Boo f=new Bar();
参照とフィールドは多態的ではありません
于 2013-02-09T22:10:05.533 に答える
0
a
Barのフィールドは、Booのシャドウフィールドです。a
これは別のフィールドですが、名前が同じであるためsuper.a
、Bar からアクセスするには Boo のフィールドを参照する必要があります。
この前の質問は、シャドーイングをよくカバーしています。
于 2013-02-09T22:12:58.170 に答える