java - 不要在子类的构造函数中创建父类(super class)实例,但完全合法

标签 java oop constructor constructor-overloading

我在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/

相关文章:

PHP - 让您的类完成所有工作而不对使用该类的脚本做太多工作是否可以?

python - 哪个类应该存储查找表?

java - Java 中的继承和构造函数

java - 整数缓存有多大?

java - Eclipse: 导入 "Existing Maven Projects"自动创建 EAR 项目

java - java 军事时间 时差

c++ - 在 C++ 中,如何使同一类的两个对象具有独特的函数行为?

java - Record 无法从构造函数中获取参数名称?

c++ - vector<unique_ptr<A>> 使用初始化列表

java - Exoplayer 音频未在后台服务中播放