class A {int x = 5;}
class B extends A {int x = 10;}
class D {
public static void main(String[] args){
A b0 = new B();
System.out.print(b0.x);
}
}
我很奇怪,爲什麼這個代碼打印的5而不是10靜態實例變量查找的Java
如果我不是寫以下,將變量x的方法,它的工作原理更是我所期待,並打印出10,因爲在編譯時只檢查b0的靜態類型A是否有方法x,然後在運行時使用b0的動態類型B來運行x。
class A {int x() {return 5;}}
class B extends A {int x() {return 10;}}
class D {
public static void main(String[] args){
A b0 = new B();
System.out.print(b0.x());
}
}
我的理論是,實例變量靜態查找不像方法,但我不知道爲什麼會這樣。
謝謝!