先來一句重要的結論:
如果一個類寫了有參構造函數,那麼無參的構造函數就不能用了。如果沒有構造函數,Java會默認有一個無參的構造函數。這個無參的構造函數可以不用寫出來。
在Java代碼中,會發現如果類有繼承的話,很多都寫了super()方法,而且還寫在了構造方法的第一行,不然就會報錯。
這個是Java的規定:子類繼承父類,子類的構造方法必須調用super()即父類的構造方法,而且必須放在構造方法的第一行。
但是有時候自己寫繼承的時候,卻沒有調用父類的構造方法,因爲:
如果父類"只"有無參構造方法,且不打算重寫子類的構造方法,爲節省代碼量,子類構造方法可以不寫,但是實際上是已經寫了,系統默認調用父類無參構造方法super(),即默認會在子類的構造方法中的第一行加上父類的無參構造方法 。
敲黑板,劃重點來了:
總結:子類構造函數必須在構造函數第一行調用父類構造函數,當子類構造函數沒有調用父類構造函數的時候,是因爲父類構造包含無參構造函數,爲了節省代碼,系統會自動添加調用。
如果父類有無參構造方法,子類構造方法的第一句是默認的super()且可以省略;如果父類沒有無參的構造方法,只有有參的構造方法,則super不能省略,super()中加上對應的參數就行了。