爲何輸出是:Java的繼承構造函數是如何工作的?
> B.foo(): bar = null
> B.foo(): bar = B.bar
>a.bar = A.bar
>B.foo(): bar =B.bar
但不是:
> B.foo(): bar = null > A.foo(): bar = A.bar >a.bar = A.bar >B.foo(): bar =B.bar
1)B延伸的這樣不就設打電話到A的類? 2)爲什麼通過a.bar調用A而不是B? 3)你能解釋一下輸出嗎? 代碼:
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= newB();
System.out.println("a.bar = "+ a.bar);
a.foo();
}
}
請修復您的代碼。它不會按原樣編譯。 – Carcigenicate
爲什麼按行:「A a = new B();」輸出有兩行? – user
方法可以重寫,字段不能。 [這個問題可能有助於解釋](http://stackoverflow.com/questions/9414990/if-you-override-a-field-in-a-subclass-of-a-class-the-subclass-has-two- fields-wi)爲什麼具有相同名稱的兩個字段不被視爲具有相同簽名的兩個方法相同。 – Obicere