实例化对象时,是否会创建超类的实例?

高拉夫:

当我们在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();
    }
}

代码的输出为:

Constructor A

Constructor B

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

乔恩·斯基特(Jon Skeet):

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从超类实例创建实例

创建子类的实例是否会创建父类的实例?

在另一个对象B中创建对象A时,对象A是否在对象B本地,并且对象A是否会超出对象B的实例化而存在?

实例化类时是否实例化了类模板的成员?

每次实例化子类时都会创建超类对象吗?

从类实例创建对象

创建对象实例而不调用超类构造函数

创建新实例时,是否会再次声明python中的类变量?

从类对象实例化类

在 main 方法中创建类本身的实例时,是否在 main 方法结束后立即删除对象?

我是否应该创建一个我永远不会仅仅因为强制转换不同的子类而实例化的超类?

调用方法时是否可以根据类型化方法创建类的实例?

在创建嵌套类的实例时,是否也正在创建嵌套类的实例?

为什么在Eager初始化中,在加载类时创建的单例类的实例可能会带来缺点?

如何从超类创建子类的实例的数组

如何从超类创建子类的实例?

在类内部实例化对象

对象类实例化数组

实例化后是否可以更改C ++对象的类?

是否可以模拟在测试类中实例化的对象

创建类实例时出错

对象是否被实例化

如何处理实例化类对象时发生的异常

实例化新对象时如何传入类的参数?

创建类数组时,其成员仍未实例化

使用静态方法时,是否每个类都实例化?

丢弃类实例是否会删除MouseListener

实例化同一类中的多个对象时,代码不会运行,但是实例化具有相同代码的重复类中的对象时,代码会起作用

为什么在OO编程中用于强制转换对象的实例在变量中实例化超类和子类?