我现在是java的初学者,对某些概念感到困惑。
假设有一个父类和一个子类。方法被重写 他们俩。 如果我这样做:
Parent p = new Child();
如何为对象分配内存? 假设父节点的内存是32个字节,子类有2个字节,使其为34个字节。
那么32字节Parent
如何保存34字节Child
?
答案 0 :(得分:0)
为了解决这个问题,您需要了解如何将数据存储在内存中。
当您声明原始数据类型的变量时,内存将为该数据分配一个存储空间。如果为该变量分配一个值,则该值将存储在该空间中。 see the image
事物与对象不同。当您声明类B的对象变量时,
例如:
“ B obj_var;”
内存将分配一个空间内存,以将地址保存到具有B的类属性(同一类或扩展A的类)的对象。如果仅声明变量,它将包含null值。
创建对象时,例如:“ new B()” 该对象将在内存中创建并被赋予一个地址。在这种情况下,您不会保存地址,因此无法访问该对象或重复使用它。
如果编写“ B obj_var = new B();”,则一次执行3件事: 1-在左手侧创建一个对象变量。 2-在右侧上创建一个对象。 3-将对象的地址分配给对象变量,因此对象的地址为 保存在对象变量中。 see the image 您可以访问下面的链接,以了解有关数据如何存储在内存中的更多信息: https://www.guru99.com/java-stack-heap.html
因此,对您的问题的答案是,当您键入“ Parent p”时,内存将为地址分配一个空间,因此其大小将与计算机代表一个地址(而不是类)需要多少字节有关。 当您键入“ new Child()”时,子类的对象将以其自己的大小创建。 由于Child类是Parent类的子类,因此我们可以通过Parent类“ Parent p = new Child();”的对象变量来引用Child类。
这不是存储在其父级内部的对象,而是存储在其object变量中的对象的地址。