java - Java 中的多态性、数据类型和内存

标签 java memory polymorphism

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

Base b = new SubClass();

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

最佳答案

(这个答案主要针对 Java。它的主旨也应该适用于 C++,但这超出了我的专业领域。)

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

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

There I'm using Ref12315 as a notional value of an object reference. We never actually see the raw value of an object reference in our code (they're opaque data structures).

That's part of why if we do this:

Base c = b;

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


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

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

关于java - Java 中的多态性、数据类型和内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48670229/

相关文章:

java - 理解 Java MouseEvent 的困难

java - 如果 edittext 留空,则强制 "0"

java - 关于字符串中的括号

c++ - malloc 的奇怪问题

c++ - 多态问题C++

java - Windows net.exe 使用驱动程序消息在 Java 上包含无效字符

javascript - react : Props destructuring and memory usage

c - 无法从结构数组中释放内存,valgrind 显示内存泄漏

C++ template covariance polymorphism 收藏

haskell - 实例声明中的 "Illegal polymorphic or qualified type"(System-F 样式树)