public class A {
String bar = "A.bar";
A() { foo(); }
public void foo() {
System.out.println("A.foo(): bar = " + bar);
}
}
public class B extends A {
String bar = "B.bar";
B(){ foo(); }
public void foo(){
System.out.println("B.foo(): bar = " + bar);
}
}
public class C {
public static void main(String[] args){
A a = new B();
System.out.println("a.bar = " + a.bar);
a.foo();
}
}
爲什麼第一個輸出有bar = null? 是否因爲在創建類B之前調用了B.foo()?如果是,那麼怎麼來B.foo()可以被調用? 還是因爲B.foo()中的字段欄試圖從A獲取欄字段,但無法訪問它?調用超類構造函數的子類方法
我的問題是不同的一個鏈接,我不問有關呼叫順序,我問爲什麼第一個輸出爲空?另一個問題不是關於字段或空變量。
我不明白,在B.foo酒吧變量如何爲null,如果在A和B中
的可能的複製[在什麼順序來在Java中的靜態/實例初始化語句塊運行?](https://stackoverflow.com/questions/2007666/in-what-order-do-static-instance-initializer-blocks-in-java-run) – Tom
請將代碼粘貼爲* text *而不是圖片。 –