当实例化子类C
时,已知其超类的构造函数(例如A
和B
(B
扩展A
) )将在C
之前实例化。这是否意味着:
C
的实例,它是否具有为从B
和A
继承的字段分配的所有物理内存,以及自己的领域?B
的实例除了自己的实例外,还有从A
继承的字段的物理内存吗?答案 0 :(得分:12)
...众所周知,超类的构造函数(比如A和B(B扩展为A))将被实例化......
实例化类。构造函数被调用。
(在编辑中建议这应该是“对象被实例化”;但是,这在技术上并不正确。根据下面链接的相同JLS部分:“在评估类时显式创建新的类实例实例创建表达式会导致实例化类。“即实例化一个类以获取对象。对象是一个实例。您不实例化对象。”
1)为A的实例,B的实例和C的实例分配了单独的内存吗?
不,有该类的实例。即一段记忆。
2)对于子类C的实例,它是否具有为从B和A继承的字段分配的所有物理内存,以及它自己的字段?
是:“每当创建一个新的类实例时,为它分配内存空间,为类类型中声明的所有实例变量提供空间,并在类类型的每个超类中声明所有实例变量,包括所有实例可隐藏的变量。“
3)B的实例是否具有从A继承的字段的物理内存以及它自己的?
按照1,在这种情况下没有“B的实例”。只有一个例子。
答案 1 :(得分:5)
C
实例具有从A
和B
继承的字段的内存。