[OCAJP]建構子


Given:

Which code fragment can be inserted at line "//insert code here" to enable the code to compile?

A.

B.

C.

D.

題解

這題是考建構子的觀念。每個類別都至少擁有一個建構子,若類別並沒有實作建構子,則其在編譯時還是會預設加入一段建構子程式。以題目「Cricket」這個類別為例,一開始並沒有實作建構子,所以編譯器會自動加入以下這段程式:

再來,所有的建構子在執行的時候都會最先呼叫父類別的建構子或是自己類別其他的建構子。如果建構子內並沒有指定要先呼叫哪個建構子,那會編譯器會一律在建構子的第一行程式加上「super();」敘述。以題目「Cricket」這個類別為例,調整建構子之後會變成下面這個樣子:

由於Cricket的父類別「Sports」,並沒有「Sports()」這個建構子,因此原本的程式會編譯失敗。所以這題目要求替Cricket類別加上正確的建構子,使得程式能夠成功編譯。

選項A在新的建構子內的第一行加上「super(11, "Cricket", "Condidtion OK");」,呼叫原本就存在於Sports類別的「Sports(int np, String sname, String sground)」建構子,因此加上這段程式可以使程式編譯成功。
選項B的新建構子並沒有在第一行使用「super」或是「this」敘述,編譯器會自動加上「super();」,但是Sports類別並沒有「Sports()」這個建構子,因此一樣會編譯失敗。
選項C的新建構子內雖然有加入「super(11, "Cricket", "Condidtion OK");」,但它放在第二行,因此會編譯錯誤。要用「super」呼叫父類別的建構子,只能在建構子的第一行使用。
選項D編譯錯誤的理由和選項C一樣。

關於作者

Magic Len

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

相關文章