JAVA繼承中的構造函數


ps:因為順口...我喜歡把方法稱為函數

1) 一個單獨的類,如果沒有聲明任何構造函數,那么系統會自動生成一個無參的構造函數,此時,new classA() 不會報錯。 ! 如果顯式聲明了一個有參構造函數,再使用 new classA(無參) 將會報錯,因為在已有情況下系統不會幫助生成無參構造,建議自己添加一個無參構造函數

---一個類的構造函數只會有三種狀況:無參    /   無參+有參    /   有參

2) 如果存在繼承關系,假設classB extends classA , 子類的所有構造函數(包括無參構造函數,有參構造函數),如果不是顯式調用哪種超類構造函數,都會默認調用super(),即:父類的無參構造函數,如果此時父類中沒有無參構造函數的話,報錯~ 建議父類也添加一個無參構造函數

(: 例:

A中只有一個有參構造函數,B中有一個無參構造函數,此時會報錯

向A中添加一個無參構造函數 ,不會報錯

3)在繼承關系中,當使用new一個類時,程序的執行順序為:首先執行父類的構造函數方法,再執行自身的構造函數方法, 這個執行順序不可更改,否則報錯或不能運行。

4)在深度繼承關系中,即當存在C繼承B,B繼承A,或者更多層繼承時,首先執行最上層的構造函數,再依次順着繼承鏈傳遞下去,一直到   創建對象的那個類。例如:我們聲明C對象時,調用的是C的構造函數c,構造函數c調用的是父類B的構造函數b,構造函數b調用的是父類A中的構造函數a,那么執行結果就是:a => b => c 

 

-problems:

子類的構造函數能否覆蓋重寫父類的構造函數?

當然8能哦。在java中,子類無法繼承父類構造函數,因此無法重寫父類構造函數。只能通過顯式調用super(null / parameters)來使用父類構造函數,或者就是調用父類中  已定義的無參構造函數,

 

試想:如果子類重寫覆蓋父類構造函數:那么需要二者的方法名相同,但構造函數的方法名是類名,故:不存在此種情況~

記住:必須調用父類的構造函數進行初始化,super()語句必須是子類構造方法中的頭一條語句!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM