there is no default constructor available in
- 原因
這個錯誤是由於繼承引起的,原因是子類里寫了並且使用了無參的構造方法(不寫默認就是無參的構造方法),但是它的父類中卻至少有一個是沒有“無參構造方法”的,就會出現這個問題
- 總結
一個類如果顯式的定義了帶參構造函數,那么默認無參構造函數自動失效
一個類只要有父類,那么在它實例化的時候,一定是從頂級的父類開始創建。對於Java來說要一直追述到Object
祖宗(Object)-> 曾爺爺 -> 爺爺 -> 父親 -> me
這個思維很自然,沒有祖宗,何來后代?祖宗的一些東西都沒准備好,后代怎么繼承去用?
也就是說當你用子類的無參構造函數創建子類對象時,會去先遞歸調用父類的無參構造方法,
這時候如果某個類的父類沒有無參構造方法就會出錯啦~
- 解決辦法
子類的構造函數必須至少有一個和父類的構造函數一致,才能實現父類的初始化,否則無法初始化父類
- 擴展
子類繼承了父類,若父類的構造方法沒有重載,那么子類的構造方法也不需要通過super調用父類構造方法。
一個類中如果構造方法重寫了並且帶了參數,那么這個類的原來系統默認的無參構造方法便消失。
由此,若一個父類只要有一個帶參數的構造方法,那么在寫其子類的構造方法時必須先通過super調用父類的構造方法才能完成子類的構造方法而且super只能寫在子類構造方法體內的第一行。