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

Given:

class Super{
    private int a;
    protected Super(int a){this.a = a;}
}
...
class Sub extends Super{
    public Sub(int a){super(a);}
    public Sub(){this.a = 5;}
}

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);}


答案:CD


解析:

首先先注意題目用了 independently

代表每個選項單獨放

都要讓程式compile



A與B乍看之下都是可行的

但若只改了第二行變數開放程度

今天引用了Sub類的無引建構子

沒有特別指出要引用父類的哪個建構子

它便會自動呼叫父類的無引述的建構子

父類Super偏偏沒有無引述建構子

此時就會產生編譯錯誤



E的話,父類的a為private

E既然沒有宣告變數a

那麼public Sub(){super(a);}的a又從哪來呢?



0 意見:

張貼留言