这几天在用继承的时候,发现了一个小坑。

在父类创建了一个带参数的构造函数的同时没有默认构造函数的时候

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;
    }
}

 

,子类如果这样做无法创建构造函数。

 hero1(int hp,int mp,int ap){
        this.ap=ap;
        this.hp=hp;
        this.mp=mp;
}

 必须在子类的构造函数里第一句上加super调用父类的构造方法。

个人理解是,当子类在创建实例的时候,会先创建父类的实例。默认会去找父类的不带参数的构造方法,由于父类创建了一个带参数的构造方法,就没有了默认不带参数的构造方法。所以子类创建的时候找不到父类的构造方法,就会报错。解决方法是在第一块代码里的注释删去,或者在子类的构造函数里添加super。