1
我偶然發現了這段代碼。
我試圖猜測在實際運行之前運行它的結果是什麼。 當我看到他們&需要一些解釋時,我真的很困惑。
這是代碼:使用繼承和重寫方法在Java中複雜輸出
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();
}
}
輸出是:
B.foo(): bar = null
B.foo(): bar = B.bar
a.bar = A.bar
B.foo(): bar = B.bar
這是爲什麼?
bar = null
怎麼樣?- 爲什麼
a.bar = A.bar
甚至出現?我沒有實例化A
。 - 如果
A
出現,爲什麼它後B
?