[OCPJP]建構子

Given:

Which two modifications enable the code to compile?

A. At line 1, remove abstract
B. At line 9, insert super();
C. At line 12, remove public
D. At line 17, insert super(x);
E. At line 17, insert super(); super.side = x;
F. At line 20, use public void area () {

題解

原先題目的程式會在第16行和第20行編譯錯誤,原因在於Rectangle類別的建構子沒有指定要先呼叫哪個建構子,因此會自動加上「super();」去呼叫Square類別沒有參數的建構子,但這個建構子並不存在。而Rectangle類別中的area方法,覆寫了Square類別中的area方法,但是可見度卻從public降到default,這是不被允許的。

所以說,選項D和選項F是正確的。

選項C不行的原因在於,Shape類別的area方法之可見度為protected,所以Square類別的area方法之可見度必定也不能低於protected。

關於作者

Magic Len

各位好,我是Magic Len,是這網站的管理員。我是台灣台中大肚山上人,畢業於台中高工資訊科和台灣科技大學資訊工程系,曾在桃機航警局服役。我熱愛自然也熱愛科學,喜歡和別人分享自己的知識與經驗。如果你有興趣認識我,可以加我的Facebook,並且請註明是從MagicLen來的。

相關文章