dreamertn9527
java中每个类必须有一个构造函数,如果没有显示的声明构造函数,那么编译器会自动加一个无参的构造函数。当显示定义了带参数的构造函数之后,而没有显示的定义无参构造函数,那么这个类就没有无参构造函数了。 子类继承父类,必须在子类的构造函数中调用父类的构造函数,如果子类的构造函数中,没有显示的调用父类的构造函数,那么会自动调用父类的无参数构造函数,如果父类没有无参数构造函数,那么子类中必须显示的调用父类的构造函数(使用super关键字即可),而且必须是在构造方法的第一个语句 中进行调用。 PS:现在说说你的代码的问题,父类Animal没有显示的定义无参构造函数,所以只有有参构造函数,子类必须调用父类的构造方法(即父类的有参构造方法),用来初始化父类。(子类在执行过程中,先执行父类,所以必须初始化父类的构造器,避免出现错误)。// 父类Animal
public class Animal {
private String color;
private String size;
// 只定义了有参构造函数,未显示定义无参构造函数
public Animal(String color, String size){
this.color = color;
this.size = size;
}
}
// 子类Dog继承父类Animal
class Dog extends Animal(){
// 子类继承父类,需要调用父类的构造方法,使用super关键字即可
public Dog(String color, String size, String test) {
super(color, size); // 必须放在第一个构造函数第一行
}
}下面是你想达到的效果:public class Animal {
private String color;
private String size;
// 显示定义无参构造函数
public Animal(){}
public Animal(String color, String size){
this.color = color;
this.size = size;
}
}
class Cat extends Animal{
public Cat(String color, String size, String test){
super(); // 其实也是调用了父类的无参构造方法,编译器默认调用而已,也可以不写该super()
}
}