這幾天在用繼承的時候,發現了一個小坑。函數
在父類建立了一個帶參數的構造函數的同時沒有默認構造函數的時候this
public class hero { int hp; int mp; int ap; //hero(){} hero(int hp,int mp,int ap){ this.hp=hp; this.mp=mp; this.ap=ap; } }
,子類若是這樣作沒法建立構造函數。blog
hero1(int hp,int mp,int ap){ this.ap=ap; this.hp=hp; this.mp=mp; }
必須在子類的構造函數裏第一句上加super調用父類的構造方法。繼承
我的理解是,當子類在建立實例的時候,會先建立父類的實例。默認會去找父類的不帶參數的構造方法,因爲父類建立了一個帶參數的構造方法,就沒有了默認不帶參數的構造方法。因此子類建立的時候找不到父類的構造方法,就會報錯。解決方法是在第一塊代碼裏的註釋刪去,或者在子類的構造函數裏添加super。class