如何物理内存基类和派生类的实例在Java之间的组织?(How is physical memory

2019-07-05 10:56发布

当一个子类C被实例化,据了解,它的超类的构造函数(比如ABB伸出A ))将早于实例C 。 那么,这是否意味着:

  1. 有分配A的情况下,B的情况和C的情况下单独的内存?
  2. 对于子类的实例 C ,它有分配给来自继承字段的所有物理内存BA ,除了自己的领域?
  3. 所以做B的实例有从继承等领域的物理内存A除了自己的?

Answer 1:

......据了解,其超类的构造函数(比如A和B(B扩展A))将被实例化...

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

(这是在编辑建议,这应该是“对象实例化”;然而,这不是技术上是正确的每下面链接的相同JLS节:“一个新的类实例明确创建当一个类实例创建表达式求值使一个类实例化。”即你为了得到一个对象实例化一个类。一个目的是,你不实例化对象的实例。)

1)没有分配用于A的情况下,B的实例和C的实例分开的存储器?

没有,是类的一个实例。 即,一个块的存储器。

2)子类C的实例,它有分配从B和A继承字段的所有物理内存,除了自己的领域?

是:“只要创建一个新的类的实例,存储空间分配给它的空间用于类类型声明的所有实例变量和所有的实例变量的类类型的每个超宣布,包括所有的实例变量可能隐藏“。

3)等做B的情况下具有从除它自己继承的字段中的物理内存?

按1,在这种情况下没有“B的实例”。 这里只有一个实例。

来源: 12.5。 新的类实例的创建,JLS 7



Answer 2:

  1. 只有一个实例被分配。
  2. 该实例包含所有类的所有字段。
  3. 那么,一个且仅C实例具有用于从遗传领域的存储器AB


文章来源: How is physical memory organized between base and derived class instances in Java?
标签: java oop