我需要在Java的Dynamic多態中做一個說明。指向基類的動態多態性引用
class Foo {
int a=3;
public void display() {
System.out.println(" in foo "+a);
}
}
class Bar extends Foo {
int a=8;
public void display() {
System.out.println(" in boo "+a);
}
}
public class Tester {
public static void main(String[]args) {
Foo f = new Bar();
f.display();
System.out.println(f.a);
}
}
在這裏,當我創建具有基類引用一個子類對象時,在調用方法f.display()
它給我的輸出作爲in boo 8
。這是因爲動態多態性,它在運行時檢查對象類型以調用該方法。
現在在打印f.a
時會打印3,因爲變量不能在java中重寫,因此稱爲隱藏。這就是爲什麼它顯示基本變量值而不是子變量值。
現在我的問題是f是指向子類對象的基類的引用。那麼f.a
如何指向基本變量。 幕後發生了什麼?引用如何指向基類?
(我知道規則,但我想知道如何/爲什麼?)