gpt4 book ai didi

java - Java 中的基类实例和派生类实例之间的物理内存是如何组织的?

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:22 24 4
gpt4 key购买 nike

当一个子类 C 被实例化时,我们知道它的父类(super class)(比如 AB 的构造函数( B extends A)) 会比C早实例化。那么这是否意味着:

  1. 是否为A实例、B实例和C实例分配了单独的内存?
  2. 对于子类 C 实例,它是否为继承自 BA 的字段分配了所有物理内存,除了自己的字段?
  3. B 的实例除了拥有自己的物理内存外,还拥有从 A 继承的字段的物理内存吗?

最佳答案

... it's known that the constructors of its super classes (say A, and B (B extends A)) will be instantiated ...

类被实例化。构造函数被调用

(在编辑中建议这应该是“对象被实例化”;但是,这在技术上是不正确的。根据下面链接的相同 JLS 部分:“在评估类时显式创建新的类实例instance creation expression causes a class to be instantiated."I.e. 你实例化一个类是为了得到一个对象。对象是一个实例。你不实例化对象。)

1) There are separate memory allocated for A's instance, B's instance and C's instance?

不,有类的一个实例。 IE。一段内存。

2) For the instance of subclass C, does it have all the physical memory allocated for the fields inherited from B and A, in addition to its own fields?

是的:“每当创建一个新的类实例时,都会为其分配内存空间,为类类型中声明的所有实例变量和类类型的每个父类(super class)中声明的所有实例变量提供空间,包括所有实例可能隐藏的变量。”

3) and so does B's instance has the physical memory for the fields inherited from A in addition to its own?

根据 1,此场景中没有“B 的实例”。只有一个实例。

来源:12.5. Creation of New Class Instances, JLS 7

关于java - Java 中的基类实例和派生类实例之间的物理内存是如何组织的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com