我有一个关于多态定义和初始化的问题。据我所知,数据类型用于保留特定数量的内存。
Base b = new SubClass();
如果我有一个只有1个成员(int x)的基类,并且我的子类有一个额外的成员(int y),那么定义为Base(4个字节)的变量如何包含2个int成员?(8个字节)是因为Java动态分配内存吗?
发布于 2019-05-15 10:20:27
(这个答案主要是针对Java的。对于C ++来说,它的主要推动力应该是正确的,但这超出了我的专业领域。)
变量不包含对象。该变量包含一个对象引用,(顾名思义)是对象的引用,它存在于内存的其他地方:
+−−−−−−−−−−−−−−−−−−−−−+
[b(基础):Ref12315] ------> | (SubClass实例)|
+−−−−−−−−−−−−−−−−−−−−−+
| x(int):42 |
| y(int):27 |
+−−−−−−−−−−−−−−−−−−−−−+
我在那里使用Ref12315
作为对象引用的名义值。我们实际上从未在代码中看到对象引用的原始值(它们是不透明的数据结构)。
如果我们这样做,这就是原因的一部分:
Base c = b;
...我们没有得到对象的副本,只有两个对它的引用(模拟C ++复制语义可以应用,我认为(?),通过运算符重载):
[b(基础):Ref12315] ---- +
| +−−−−−−−−−−−−−−−−−−−−−+
+ - > | (SubClass实例)|
| +−−−−−−−−−−−−−−−−−−−−−+
[c(Base):Ref12315] ---- + | x(int):42 |
| y(int):27 |
+−−−−−−−−−−−−−−−−−−−−−+
无论类型如何,所有对象引用都具有相同的大小。物体大小不一。
https://stackoverflow.com/questions/-100006729
复制相似问题