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
答案:C
解析:
類別被宣告為物件時
會呼叫建構子
建構子的第一行如果沒有寫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 意見:
張貼留言