java - Parent 变量如何存储大于 Parent 的 Child?

标签 java memory methods overriding

我现在是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/

相关文章:

java - 无法从文本文件中读取行

java - 正则表达式匹配链接文本与 href 值不同的 anchor 标记

python - 如何使用 joblib.Memory 缓存 Python 类的成员函数的输出

multithreading - 如何解决 FlasCC 中巨大的 pthread 内存成本?

java - 为什么这不是合法的方法签名?

java - 返回错误值的方法

java - 将整数数组转换为一个长整数

java - Java中删除艺术家时的外键问题

java - 从最后一个索引的字符串中删除特定字符

php - 清除 PHP 正在使用的内存