我现在是java初学者,对某些概念感到困惑。
假设有一个父类和一个子类。方法之间被重写 他们俩。 如果我这样做:
Parent p = new Child();
到底如何为对象分配内存? 假设父类的内存为 32 字节,子类额外占用 2 字节,使其成为 34 字节。
那么 32 字节的 Parent
到底是如何保存 34 字节的 Child
的呢?
最佳答案
为了回答这个问题,你需要了解数据在内存中是如何存储的。
当你声明一个基本数据类型的变量时,内存会为该数据分配一个存储空间。如果为该变量分配一个值,该值将存储在该空间中。 see the image
事物与对象不同。当你声明B类的对象变量时,
例如:
“B obj_var;”
内存将分配一 block 空间内存来保存具有B的类属性的对象的地址(可以是同一个类,也可以是扩展A的类)。如果您只是声明该变量,它将包含 null 值。
创建对象时,例如:“new B()” 该对象将在内存中创建并被赋予一个地址。在这种情况下,您不会保存地址,因此无法访问该对象或重用它。
如果你写“B obj_var = new B();”,你会同时做三件事: 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类。
它不是存储在其父对象中的对象,而是存储在其对象变量中的对象地址。
关于java - Parent 变量如何存储大于 Parent 的 Child?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50908237/