隐式超构造函数 Person() 未定义。是否必须显式调用另一个构造函数?

2022-09-01 01:58:19

我正在处理一个项目,我收到错误“隐式超构造函数Person()未定义。必须显式调用另一个构造函数“,我不太理解它。

这是我的个人课程:

public class Person {
    public Person(String name, double DOB){

    }
}

我的学生班级在尝试实现人员类时,并给它一个教师变量。

public class Student extends Person {

    public Student(String Instructor) {

    }

}

答案 1

如果构造函数未显式调用超类构造函数,则 Java 编译器会自动插入对超类的无参数构造函数的调用。

如果超类没有无参数构造函数,您将收到编译时错误。对象确实有这样的构造函数,所以如果对象是唯一的超类,那就没有问题了。

参考:http://docs.oracle.com/javase/tutorial/java/IandI/super.html:(请参阅“子类构造函数”一节下)

因此,每当处理参数化构造函数时,请调用父构造函数。此外,此 super() 调用应该是构造函数块中的第一行。super(parameter1, parameter2 ..)


答案 2

您需要调用定义的构造函数:super

public Student(String instructor) {
    super(/* name */, /* date of birth */);
}

不能仅仅因为未定义该构造函数而进行调用。super()