1. 程式人生 > >子類與父類構造方法的關係

子類與父類構造方法的關係

編寫JAVA作業時在繼承的環節發現了一些錯誤,希望總結一些規律:(以下全部屬於自己歸納,可能有問題)

一句話概括就是:子類一定會呼叫(不是繼承)父類的構造方法!

即遵循一個原則:子類的構造一定是在父類已構造的基礎上!

這句話要分為幾種情況來理解(下面只討論父類有建構函式):

子類建構函式自動呼叫super() (也可以手動加上)

但如果父類只有含引數的構造方法,那麼子類必須申明一個構造方法,其中包含對super(args)的呼叫

一、父類含有無參建構函式

1、子類沒有構造方法或者含有無參的構造方法:

這種情況,都會預設地呼叫super()

2、子類含有有引數構造方法:

同樣會在首句預設呼叫super() //其實跟情況1類似

二、父類含有含引數的構造方法,不含無引數的構造方法:

子類沒得選擇:

子類必須申明一個構造方法(且含super的args),且方法裡要首先呼叫super(args),否則報錯。

三、父類含 含引數的構造方法和無參的構造方法:

此時子類可以選擇性呼叫:

可以無構造方法:仍會預設呼叫super()

也可以有構造方法:其中會預設地呼叫super(),你也可以在開頭加上這句,如果你不希望呼叫父類預設的無參方法,那麼在 子類構造方法 中呼叫 父類含參構造方法。

上述看似情況複雜,其實基於其原則理解並不難。

綜上:java為了保持 子類的構造基於父類的構造 這一原則,子類構造時必須通過某些方式首先呼叫父類的構造方法,否則會報錯。