这几天在用继承的时候,发现了一个小坑。函数
在父类建立了一个带参数的构造函数的同时没有默认构造函数的时候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