Java中子類繼承父類關於構造方法的問題:there is no default constructor available in


there is no default constructor available in 

  • 原因

這個錯誤是由於繼承引起的,原因是子類里寫了並且使用了無參的構造方法(不寫默認就是無參的構造方法),但是它的父類中卻至少有一個是沒有“無參構造方法”的,就會出現這個問題

  • 總結

一個類如果顯式的定義了帶參構造函數,那么默認無參構造函數自動失效 

一個類只要有父類,那么在它實例化的時候,一定是從頂級的父類開始創建。對於Java來說要一直追述到Object 

祖宗(Object)-> 曾爺爺 -> 爺爺 -> 父親 -> me 
這個思維很自然,沒有祖宗,何來后代?祖宗的一些東西都沒准備好,后代怎么繼承去用?

也就是說當你用子類的無參構造函數創建子類對象時,會去先遞歸調用父類的無參構造方法,

這時候如果某個類的父類沒有無參構造方法就會出錯啦~

  • 解決辦法

子類的構造函數必須至少有一個和父類的構造函數一致,才能實現父類的初始化,否則無法初始化父類

  • 擴展

子類繼承了父類,若父類的構造方法沒有重載,那么子類的構造方法也不需要通過super調用父類構造方法。

一個類中如果構造方法重寫了並且帶了參數,那么這個類的原來系統默認的無參構造方法便消失。

由此,若一個父類只要有一個帶參數的構造方法,那么在寫其子類的構造方法時必須先通過super調用父類的構造方法才能完成子類的構造方法而且super只能寫在子類構造方法體內的第一行。


免責聲明!

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



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