[OCAJP]繼承、建構子與覆寫方法

Given:

What should statement1, statement2, and statement3, be respectively, in order to produce the result?

Shape: constructor
Square: foo
Shape: foo

A.

B.

C.

D.

E.

F.

題解

輸出的第1行為「Shape: constructor」,因此需要實體化出Shape物件才會執行第13行的程式。Square類別繼承Shape類別,不傳入參數實體化出Square物件也會執行到Shape建構子。所以目前看來,statement1可以實體化出Square物件或是Shape物件,且選項A、B是錯誤的。

輸出的第2行為「Square: foo」,也就是要執行程式第35行,Square類別內的foo(String label)物件方法。所以statement1應該要實體化出Square物件,並且在statement2呼叫Square物件的foo方法時,必須傳入字串參數。因此選項C、D、E是錯誤的。

輸出的第3行為「Square: foo」,也就是要執行程式第17行,Shape類別內的foo()方法。這個方法在程式第31行,也就是Square類別內被覆寫,但覆寫的程式實作使用了「super」去呼叫了Shape類別原先的foo()方法,所以呼叫Square物件的foo()方法也會輸出「Square: foo」。選項F是正確答案。

關於作者

Magic Len

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

相關文章