繁体   English   中英

Java中的多态性,数据类型和内存

[英]Polymorphism, Data types, and Memory in Java

我对多态定义和初始化有疑问。 据我了解,数据类型用于保留特定数量的内存。

Base b = new SubClass();

如果我有一个只有1个成员(int x)的基类,而我的子类又有一个附加成员(int y),那么定义为基类的变量(4个字节)如何包含2个int成员(8个字节)?是因为Java动态分配内存吗?

(这个答案主要是针对Java的。它的主要目的也应适用于C ++,但这超出了我的专业知识范围。)

变量不包含对象。 该变量包含一个对象引用 (顾名思义)是对该对象的引用 ,该对象存在于内存中的其他位置:

+−−−−−−−−−−−−−−−−−−−−−+
[b (Base): Ref12315]−−−−−−>| (SubClass instance) |
                           +−−−−−−−−−−−−−−−−−−−−−+
                           | x (int): 42         |
                           | y (int): 27         |
                           +−−−−−−−−−−−−−−−−−−−−−+

我在这里使用Ref12315作为对象引用的名义值。 我们从未在代码中实际看到过对象引用的原始值(它们是不透明的数据结构)。

这就是为什么要这样做的一部分:

Base c = b;

...我们没有得到该对象的副本 ,只有两个引用(通过操作符重载,可以应用C ++复制语义,我认为(?))

[b (Base): Ref12315]−−−−+
                        |  +−−−−−−−−−−−−−−−−−−−−−+
                        +−>| (SubClass instance) |
                        |  +−−−−−−−−−−−−−−−−−−−−−+
[c (Base): Ref12315]−−−−+  | x (int): 42         |
                           | y (int): 27         |
                           +−−−−−−−−−−−−−−−−−−−−−+

无论类型如何,所有对象引用的大小均相同。 对象的大小各不相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM