extends、显式调用父类构造

class Person {
    String name = "No name";
    public Person(String nm) {
        name = nm;
    }
}
class Employee extends Person {
    String empID = "0000";
    public Employee(String id) {
        empID = id;
    }
}
public class Test {
    public static void main(String args[]) {
        Employee e = new Employee("123");
        System.out.println(e.empID);
    }
}

extends、显式调用父类构造_第1张图片

这段程序会报错:Implicit super constructor Person() is undefined. Must explicitly invoke another constructor


如果子类构造器没有显示地调用超类的构造器,则将自动地调用超类默认(没有参数)的构造器。如果超类没有不带参数的构造器,并且在子类的构造器中有没有显示地调用超类的其他构造器,则Java编译器将报告错误。使用super调用构造器的语句必须是子类构造器的第一条语句。 —《Java核心技术·卷I》


更改为:

class Employee extends Person {
    String empID = "0000";
    public Employee(String id) {
       // super语句必须写在第一行
        super(id);
        // TODO: do something 
        empID = id;
    }
}

手动显式调用父类构造函数,而且 super语句必须写在第一行。

写的不好,请见谅。 记录个人日常,希望能帮到你!

你可能感兴趣的:(extends、显式调用父类构造)