SCJP(OCPJP) 考古題解析 第28題

Given:

class X {
    X() { System.out.print(1); }
    X(int x) {
        this();
        System.out.print(2);
    }
}
public class Y extends X {
    Y() {
        super(6);
        System.out.print(3);
    }
    Y(int y) {
        this();
        System.out.println(4);
    }
    public static void main(String[] a) { new Y(5); }
}


What is the result?

A. 13
B. 134
C. 1234
D. 2134
E. 2143
F. 4321

答案:


解析:


類別被宣告為物件時

會呼叫建構子

建構子的第一行如果沒有寫super 或是this 的話

就會給定預設super() 在建構子的第一行



也就是說

子代的建構子在運作之前

必定會先運行父代的建構子

父代的建構子又會運行父代的父代的建構子…

直到最上層Object 代為止

從子代一直呼叫到最上層父代

再從最父代運行回到子代



call Y(int y)
→第14行this() call Y()
→Y() call super(6)到第3行
→第4行的this() call X()印出1
→接著第5行印出2
→第11行印出3
→最後印出4


依序為1234。



0 意見:

張貼留言