[OCAJP]建構子與欄位初始化

Given:

Which constructor initializes the variable x3?

A. Only the default constructor of class X
B. Only the no-argument constructor of class Y
C. Only the no-argument constructor of class Z
D. Only the default constructor of object class

題解

程式第31行實體畫出Z物件,並把實體化出來的物件參考給變數obj儲存。在實體化Z物件的時候,會先執行第21行Z類別的建構子,由於這個建構子並沒有使用「super」或是「this」來指定要先呼叫哪個建構子,因此預設會在編譯時添加「super();」至第一行中。Z類別的父類別是Y類別,因此Z類別建構子呼叫「super()」會執行第10行Y類別的建構子。基於同樣的原因,Y類別的建構子也會去呼叫X類別的建構子,X類別沒有撰寫建構子,所以在編譯時期會自動加入預設的X類別之建構子:

在這個實體化出Z物件的過程中,並沒有在執行建構子的時候去初始化x3變數的值,x3整數變數在被宣告出來的時候,就會預設為0,因此這題描述比較合理的是選項A。

關於作者

Magic Len

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

相關文章