子类的构造函数不编译

时间:2013-04-27 03:54:18

标签: java

我有一个名为Person的抽象类和一个扩展Person的子类,名为Employee。当我尝试编译时,我得到一个构造函数错误。我如何在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 个答案:

答案 0 :(得分:4)

您忘记将参数传递给super()声明。您的抽象构造函数需要参数。 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() {}
}

答案 1 :(得分:1)

这就是它

public Employee(String fname, String lname, char g) {
    super(fname, lname, g);
...

答案 2 :(得分:1)

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

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

public Employee(String fname, String lname, char g) {
    super(fname, lname, g);
}

答案 3 :(得分:1)

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

super("John", "Doe", 'M');