SCJP 1.6版考題 018

出自 陳富國維基館
於 2013年3月30日 (六) 08:38 由 Ikk (對話 | 貢獻) 所做的修訂 (新頁面: 1. class Super{ 2. private int a; 3. protected Super(int a){this.a = a;} 4. } ... 11. class Sub extends Super{ 12. public Sub(int a){super(a);} 13. public Sub(){this.a ...)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
前往: 導覽搜尋
1. class Super{
2.   private int a;
3.   protected Super(int a){this.a = a;}
4. }
...
11. class Sub extends Super{
12.   public Sub(int a){super(a);}
13.   public Sub(){this.a = 5;}
14. }


Which two, independently, will allow Sub to compile? (Choose two.)

A. Change line 2 to: 
     public int a;

B. Change line 2 to:
     protected int a; 

C. Change line 13 to:
     public Sub(){this(5);}

D. Change line 13 to:
     public Sub(){super(5);}

E. Change line 13 to:
     public Sub(){super(a);}

解答


Ans: C D

解說:
SCJP18.png

上面的程式會發生二個編譯上的錯誤,
第一錯誤是:第13行,會自動地被javac加入一個super()呼叫,而super類別中又沒有無參數的建構子。
第二個錯誤是this.a會存取到super中私有的a,造成錯誤!

A/B將super中的a存取屬性改成public/protected僅修正第2個錯誤,第1個錯誤還在
E修正了第1個問題,但第2個問題依然存在。