在实例化对象时是否创建了超类的实例?

Gau*_*rav 8 java inheritance constructor

当我们在java中实例化一个特定的类时,是否会创建一个超类实例.如果是这种情况,则会有很多实例化所有超类的开销.我试过以下代码:

public class AClass {
    public AClass() {
        System.out.println("Constructor A");
    }
}

public class BClass extends AClass{
    public BClass(){
        System.out.println("Constructor B");
    }
}

public class Test {
    public static void main(String[] args) {
        BClass b = new BClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

代码的输出是:

Constructor A

Constructor B
Run Code Online (Sandbox Code Playgroud)

那么,这是否意味着当我们实例化一个类时,会创建超类对象的完整层次结构?

Jon*_*eet 11

创建单个对象 - 但该对象超类和子类(以及java.lang.Object它自身)的实例.没有三个单独的对象.有一个对象有一组字段(基本上是在层次结构中上下声明的所有字段的并集)和一个对象标题.

构造函数执行所有在继承层次结构的方式-但this参考值将是所有这些构造相同; 它们都有助于单个对象的初始化.