我有一个名为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() {}
}
答案 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');