我有一个名为Human的超类,它的构造函数。我还有一个名为Employee的子类,有两个构造函数。我想在子类里面#39;构造函数调用另一个子类'构造函数和超类'构造函数。请看以下内容:
public class Human {
protected String name;
protected String surname;
public Human(String n, String s){
name=n;
surname=s;
}
}
和员工
public class Employee extends Human{
int salary;
public Employee(){
System.out.println("Creating an Employee");
}
public Employee(int salary){
this();
super("Markos", "petrou");
this.salary=salary;
}
}
我认为这不起作用,但我想要你的意见。我有办法做到这一点吗?
答案 0 :(得分:1)
这可能是实现的一种方式:
public class Employee extends Human{
private int salary;
public Employee(String name, String surname, int salary){
super(name, surname);
this.salary=salary;
}
}
答案 1 :(得分:0)
这是不可能的。 Java只允许在构造函数代码中调用另一个构造函数。也许你想要像这样构建你的类:
public class Employee extends Human {
int salary;
private void init() {
System.out.println("Creating an Employee");
}
public Employee(){
init();
}
public Employee(int salary){
super("Markos", "petrou");
init();
this.salary=salary;
}
}
顺便说一下,你的代码无论如何都是无效的。 Person
应该在其无参数构造函数中调用超级构造函数,但它不会。 Java允许你隐式调用超类'无参数构造函数,但Human
没有。
答案 2 :(得分:0)
如果你真的想要
public Employee(){
System.out.println("Creating an Employee");
}
那么你应该在类Human
中有一个默认的构造函数,因为这将尝试调用super()
并且你没有在超类中没有参数默认构造函数。
OR
你可以像
那样明确地打电话super(name, surname);
答案 3 :(得分:0)
public class Employee extends Human{
int salary;
public Employee(){
super("Markos", "petrou");
System.out.println("Creating an Employee");
}
public Employee(int salary){
super("Markos", "petrou");
this.salary=salary;
}
}
如果您接受使用setter方法设置的名称,则可以向Human添加无参数构造函数。
答案 4 :(得分:0)
这是不可能的。你的子类必须调用一个超级构造函数作为它们的第一条指令(或调用同一个类的另一个构造函数,第一条指令是一个超级构造函数调用)。
答案 5 :(得分:0)
您无法同时致电this
和super
。在java中,构造函数的第一行是this或super。如果没有提及,则会调用super()