0

我有一个名为 Person 的抽象类和一个名为 Employee 的扩展 Person 的子类。当我尝试编译时,我得到一个构造函数错误。我如何在 Employee 类中编写构造函数以便编译?如果您需要有关此问题的更多信息,请告诉我。谢谢你。

public abstract class Person {    //Person abstract class
   public String firstName;
   public String lastName;
   public char gender;

   public Person(String fname, String lname, char g) { //constructor
      firstName = fname;
      lastName = lname;
      gender = g;
   }
   public abstract void setDefaults();
}

public class Employee extends Person {   //Employee class that extends Person

   public Employee() {    //i thought super(); might solve the problem, but it didnt.
      super();
   }
   public void setDefaults() {}
}
4

4 回答 4

4

您忘记将参数传递给您的super()声明。您的抽象构造函数需要参数。in 中的参数super()需要与您的父构造函数相同。您可以在没有任何参数的情况下使用的唯一方法super()是您的父构造函数根本没有任何参数。

public abstract class Person {    //Person abstract class
   public String firstName;
   public String lastName;
   public char gender;

   public Person(String fname, String lname, char g) { //constructor
      firstName = fname;
      lastName = lname;
      gender = g;
   }
   public abstract void setDefaults();
}

public class Employee extends Person {   //Employee class that extends Person

   public Employee(String fname, String lname, char g) {    //i thought super(); might solve the problem, but it didnt.
      super(fname, lname, g);
   }
   public void setDefaults() {}
}
于 2013-04-27T03:56:58.523 回答
1

就是这个

public Employee(String fname, String lname, char g) {
    super(fname, lname, g);
...
于 2013-04-27T03:56:20.540 回答
1

这是因为super();没有参数不再可用,因为您在 Person 中定义了自己的构造函数。

您可以通过修改 Employee 中的构造函数定义来接受和传递与您在其超类 Person 中创建的构造函数相同的参数来修复它:

public Employee(String fname, String lname, char g) {
    super(fname, lname, g);
}
于 2013-04-27T03:57:03.623 回答
1

您正在调用 super() ,它等同于超类的构造函数。但是您没有默认(无参数)构造函数。你可以做

super("John", "Doe", 'M');
于 2013-04-27T03:58:38.603 回答