我有一个基本问题, 在内存布局方面,继承如何与关联不同。
class BaseClass{
private int i;
public void DoSomethinG(){}
}
class DerivedClass : BaseClass{
}
class AssocClass {
private BaseClass bClass = new BaseClass();
}
除了对私有成员的访问限制外,我相信DerivedClass和AssocClass都是相同的。 BaseClass中变量i的内存在DerivedClass和AssocClasss的大小应该相同的情况下分配。
我的假设是正确的还是我错过了一些微不足道的东西?
此致 哎呀
答案 0 :(得分:2)
两者之间的内存布局不同。使用DerivedClass
,来自DerivedClass
和BaseClass
的数据将一起存储。如果没有DerivedClass
的隐式实例,则不能拥有BaseClass
的实例。
AssocClass
引用了BaseClass
的实例。这可能为null,因此可能根本没有实例。如果存在实例,则它是存储在其他位置的单独对象。例如。它可能在不同代的堆中。这也意味着实例可以独立地进行垃圾收集(前提是AssocClass
的实例不引用BaseClass
的实例)。