错误:Implicit super constructor Pet() is undefined for default constructor. Must define an explicit constructor
错误解决办法:
1.当子类继承父类时,父类必须不能只有有参构造函数!父类可以同时又有参构造和无参构造,或者两个都没有!所以将父类的构造方法都删掉或者两个都写上即可。
2.子类中加上父类的有参构造函数,名字是子类。有参构造方法的作用是初始化成员变量。
错误原因
当子类继承时,必须在自己的构造函数显式调用父类的构造函数才能确保子类在初始化前父类会被实例化,就是子类得帮父类把未初始化的成员变量初始化。
如果你父类中有无参的构造函数,子类就不会强制要求调用,写的代码就可以通过,编译器会默认帮你调用父类的构造函数。
但是当父类只有有参构造函数,编辑器没法默认调用父类的无参构造函数。
例题:
父类:
public class Pet {
public String name;
public int age;
public void eat(){
System.out.println(name+"会吃");
}
public void drink(){
System.out.println(name+"会喝");
}
public void shout(){
System.out.println(name+"会叫");
}
/*
public Pet(String name, int age) {
this.name = name;
this.age = age;
}
public Pet() {
super();
// TODO Auto-generated constructor stub
}*/
}
子类:
//猫类
public class Cat extends Pet{
public void climbTree(){
System.out.println(super.name+"会爬树");
}
}
//狗类
public class Dog extends Pet{
public void police(){
System.out.println(super.name+"会警戒");
}
}