Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,基本类实例和派生类实例之间的物理内存是如何组织的?_Java_Oop - Fatal编程技术网

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

在Java中,基本类实例和派生类实例之间的物理内存是如何组织的?,java,oop,Java,Oop,当子类C被实例化时,我们知道它的超类的构造函数(比如a和B(B扩展a)将在C之前被实例化。那么这是否意味着: 是否为A的实例、B的实例和C的实例分配了单独的内存 对于子类C,除了它自己的字段外,它是否还为继承自B和A的字段分配了所有物理内存 B的实例除了自己的实例外,还具有从A继承的字段的物理内存吗 。。。我们知道它的超类(比如A和B(B扩展了A))的构造函数将被实例化 类被实例化。构造函数被调用 (编辑中建议这应该是“实例化对象”;但是,这在技术上是不正确的。根据下面链接的同一JLS部分:“当

当子类
C
被实例化时,我们知道它的超类的构造函数(比如
a
B
B
扩展
a
)将在
C
之前被实例化。那么这是否意味着:

  • 是否为A的实例、B的实例和C的实例分配了单独的内存
  • 对于子类
    C
    ,除了它自己的字段外,它是否还为继承自
    B
    A
    的字段分配了所有物理内存
  • B
    的实例除了自己的实例外,还具有从
    A
    继承的字段的物理内存吗
  • 。。。我们知道它的超类(比如A和B(B扩展了A))的构造函数将被实例化

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

    (编辑中建议这应该是“实例化对象”;但是,这在技术上是不正确的。根据下面链接的同一JLS部分:“当类实例创建表达式的求值导致类实例化时,显式创建新的类实例。”例如,你实例化一个类是为了得到一个对象。一个对象就是一个实例。你不实例化对象。)

    1) 是否为A的实例、B的实例和C的实例分配了单独的内存

    不,该类有一个实例。即一段记忆

    2) 对于子类C的实例,除了它自己的字段外,它是否还为从B和A继承的字段分配了所有物理内存

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

    3) B的实例除了自身的内存外,还有从A继承的字段的物理内存吗

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

    资料来源:

  • 只分配了一个实例
  • 该实例包含所有类的所有字段
  • 好的,唯一的
    C
    实例具有从
    A
    B
    继承的字段的内存

  • 据我所知,创建了1个实例,C的内存映射包含它的父对象。我假设如果是A[field1,field2],那么B将是B[A[field1,field2],field3]——即A分配在B的实例中,因此当您转换为A时,它将正确映射。我还原了您对我的答案的编辑。请参阅添加的附加说明,解释为什么原文在技术上更准确。