0

我有这个类,人:

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 继承的任何示例相匹配,但我继续收到此错误。

4

2 回答 2

5

调用super();假设类中有一个默认构造函数Person,而没有这样的构造函数,因为您有一个非默认构造函数。

您必须明确提供默认构造函数:

public Person() { }

或者super语句中传递两个参数:

super("Firstname", "Lastname");
于 2015-02-24T14:49:21.860 回答
0

发生这种情况是因为您的 Person 类中存在no zero argument constructordefault constructor存在。

由于每个子构造函数都在它的 1 行中调用父类构造函数,super()因此以同样的方式调用学生类的构造函数,并且无法在父类中找到默认构造函数。

为什么Java Compiler不自动/隐式提供默认构造函数因为parameterised Constuctor已经存在于您的父类中

于 2015-02-24T14:49:29.263 回答