子類與父類構造方法的關係
阿新 • • 發佈:2018-12-19
編寫JAVA作業時在繼承的環節發現了一些錯誤,希望總結一些規律:(以下全部屬於自己歸納,可能有問題)
一句話概括就是:子類一定會呼叫(不是繼承)父類的構造方法!
即遵循一個原則:子類的構造一定是在父類已構造的基礎上!
這句話要分為幾種情況來理解(下面只討論父類有建構函式):
子類建構函式自動呼叫super() (也可以手動加上)
但如果父類只有含引數的構造方法,那麼子類必須申明一個構造方法,其中包含對super(args)的呼叫
一、父類含有無參建構函式
1、子類沒有構造方法或者含有無參的構造方法:
這種情況,都會預設地呼叫super()
2、子類含有有引數構造方法:
同樣會在首句預設呼叫super() //其實跟情況1類似
二、父類含有含引數的構造方法,不含無引數的構造方法:
子類沒得選擇:
子類必須申明一個構造方法(且含super的args),且方法裡要首先呼叫super(args),否則報錯。
三、父類含 含引數的構造方法和無參的構造方法:
此時子類可以選擇性呼叫:
可以無構造方法:仍會預設呼叫super()
也可以有構造方法:其中會預設地呼叫super(),你也可以在開頭加上這句,如果你不希望呼叫父類預設的無參方法,那麼在 子類構造方法 中呼叫 父類含參構造方法。
上述看似情況複雜,其實基於其原則理解並不難。