我对如何在继承的情况下完成对象分配感到困惑 请考虑以下代码。
class Base
{
}
class Derived : Base
{
// some code
}
如果我们做的话,从主要
Derived d = new Derived();
和
Base b = new Derived();
堆中两种情况的内存分配是什么。 派生对象是在基础对象内部还是它们彼此相邻
答案 0 :(得分:5)
两个对象的内存分配看起来完全一样。两个对象的类型都相同Derived
。
当然,每个对象都将在堆上的自己的空间中分配。
创建对象时的重要性是用于构造对象的类(类型),而不是存储对象的引用类型。
每个对象都作为完整实体存在,但您可以将其视为其继承的所有类的所有部分的摘要。在一种方式Derived
对象实例里面包含Base
对象实例。不是相反。
答案 1 :(得分:1)
在这两种情况下,您都会实例化具体Derived类的对象,因此两者的内存占用量相同 - 您使用Base和Derived类的引用来引用它们,但是您可以在两个cades中实例化Derived类。
但至于为你的问题提供一般答案 - 是的,在派生类的内存实例中包含其基类的所有成员。