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 」