考慮int a
變量,這些類會發生什麼:當基類和派生類都具有相同名稱的變量
class Foo {
public int a = 3;
public void addFive() { a += 5; System.out.print("f "); }
}
class Bar extends Foo {
public int a = 8;
public void addFive() { this.a += 5; System.out.print("b "); }
}
public class test {
public static void main(String [] args){
Foo f = new Bar();
f.addFive();
System.out.println(f.a);
}
}
我明白addFive()
已經在子類中被覆蓋的方法,在課堂測試當引用子類的基類引用用於調用重寫的方法時,將調用子類版本addFive
。
但是公共實例變量a
呢?當基類和派生類都具有相同的變量時會發生什麼?
上述程序的輸出是
b 3
這是如何發生的呢?
我對代碼做了一些更改,無法理解發生了什麼。我在Bar中添加了一個顯示方法,並在main中調用它,但是得到了編譯器錯誤。在Foo中添加了一個顯示方法,但令人驚訝地顯示了酒吧的顯示。這是Java的缺陷嗎? – 2014-08-26 03:48:53
@SrujanBarai這就是多態性。 編譯時間:早期綁定:檢查發生在引用類型上。 運行時間:後期綁定:調用實際對象的類型。 – 2017-11-06 08:00:44