gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:52:18 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com