首页 > 解决方案 > 构造函数中的对象创建链接 wrt 继承

问题描述

当我们创建一个类的实例时,它会自动以一种或另一种方式调用超类构造函数。在继承中,当我们创建子类的实例时,它还具有不可见的父类字段引用,父类字段引用如何指向堆区中的子类?例如,当我们创建任何类的实例 ( A ref = new A(); ) 时,会在堆内存 (new A()) 中创建一个对象,该对象链接到堆栈区域 (ref) 中存在的引用。

同样,如果我创建了一个类的 n 个实例,这是否意味着我正在创建 n 个不同的 Object 类实例?因为每个类默认扩展 Object 类。

标签: java

解决方案


假设某个类 B 有一些私有字段 x 和 y。为了完成“它的工作”,在调用 B 上的方法时给出所需的行为,这些字段当然必须存在于为 B 的实例分配的“内存区域”中。

现在,当 B 被 C 扩展时,当然,当您实例化 C 时,这些字段 x 和 y 也需要分配。你是对的。

但是:这并不意味着您为 C 实例化一个“额外的”B 对象。它只是意味着当 JVM 为 C 实例分配内存时,它知道需要为继承的 x 和 y 字段留出空间.

最后:Object 类没有任何字段。因此没有额外的内存开销“因为任何东西都扩展了对象”。


推荐阅读