构造函数使用它和超级Java

时间:2014-08-01 10:14:30

标签: java constructor this super

我有一个名为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;
}
}

我认为这不起作用,但我想要你的意见。我有办法做到这一点吗?

6 个答案:

答案 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)

您无法同时致电thissuper。在java中,构造函数的第一行是this或super。如果没有提及,则会调用super()