class A {
public A() {
System.out.print("A ");
}
}
class B extends A {
public B() {
System.out.print("B ");
}
}
class C extends B {
public C() {
System.out.print("C ");
}
public static void main(String[] args) {
C c = new C();
}
}
What is the result?
A.
C B A
B.
C
C.
A B C
D. Compilation fails at line n1 and line n2
題解
程式第22行,實體化出了C的物件,因此會執行C的建構子。
建構子若並沒有使用「super」或是「this」來定義要先執行哪個建構子,在編譯階段時會自動在第一行加上「super();」。因此程式其實可以擴展成這樣:
class A {
public A() {
super();
System.out.print("A ");
}
}
class B extends A {
public B() {
super();
System.out.print("B ");
}
}
class C extends B {
public C() {
super();
System.out.print("C ");
}
public static void main(String[] args) {
C c = new C();
}
}
所以會依序輸出「A 」、「B 」、「C 」