我在scjp指南中读到如下内容
In fact, you can't make a new object without invoking not just the constructor of the object's actual class type, but also the constructor of each of its superclasses!
例如
public class Person{
}
public class Employee extends Person{
public Employee(){
}
}
我没有创建 Person 实例,但它是合法的。
请为我解释一下,谢谢你的帮助。
最佳答案
无论何时实例化一个子类,它都会首先调用父类(super class)的构造函数。
您可以在这里找到更多相关信息:JSL §8.8.7
Person.java
public class Person {
public Person() {
System.out.println("Super class constructor called");
}
}
员工.java
public class Employee extends Person {
public Employee() {
System.out.println("Sub class constructor called");
}
}
如果您随后实例化您的 Employee:
Employee e = new Employee();
输出:
Super class constructor called
Sub class constructor called
关于java - 不要在子类的构造函数中创建父类(super class)实例,但完全合法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17486086/