我有这个班,人:
public class Person{
String firstname;
String lastname;
public Person(String fname, String lname){
}
public String toString(){
}
}
这个子类,学生:
public class Student extends Person{
Student(){
super();
}
int studentID;
int level;
public Student(String fName, String lName, int gLevel){
}
public int getLevel(){
}
public String toString(){
}
}
当我在DrJava中编译时,我收到错误:
cannot find symbol
symbol : constructor Person()
location: class Person
我不确定问题是什么。我的理解是使用super()构造函数应该解决这个问题,并且在代码中甚至不需要它。我的代码匹配我在网上看到的在Java中演示继承的任何示例,但我仍然会遇到此错误。
答案 0 :(得分:5)
调用super();
假设Person
类中有一个默认构造函数,而没有这样,因为你有一个非默认构造函数。
您必须 明确提供默认构造函数:
public Person() { }
或在super
语句中传递两个参数:
super("Firstname", "Lastname");
答案 1 :(得分:0)
这是因为您的人员类中存在no zero argument constructor
或default constructor
。
由于每个子构造函数都隐式调用了父类类构造函数的1行super()
,所以同样地调用了Student Class的构造函数,并且它无法在父类中找到默认的构造函数。
为什么Java Compiler
不会自动/隐式地提供默认构造函数因为父类中已存在parameterised Constuctor