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 意見:
張貼留言