Чем наследование отличается от ассоциации, когда речь идет о разметке памяти? - PullRequest
2 голосов
/ 18 ноября 2010

У меня есть основной вопрос, Чем наследование отличается от ассоциации, когда речь заходит о разметке памяти.

class BaseClass{
 private int i;
 public void DoSomethinG(){} 
}

class DerivedClass : BaseClass{
}

class AssocClass {
private BaseClass bClass = new BaseClass();
}

Кроме ограничений доступа для частных пользователей, я считаю, что DerivedClass и AssocClass одинаковы. Память для переменной i в BaseClass выделяется в обоих случаях, размер DerivedClass и AssocClasss должен быть одинаковым.

Я прав в своем предположении или я упустил что-то тривиальное?

С уважением, Jeez

1 Ответ

2 голосов
/ 18 ноября 2010

Расположение памяти отличается между двумя.При DerivedClass данные из DerivedClass и BaseClass будут сохраняться вместе.Вы не можете иметь экземпляр DerivedClass, не имея также неявного экземпляра BaseClass.

AssocClass имеет ссылку на экземпляр BaseClass.Это может быть нулем, так что может не быть никакого экземпляра вообще.Если есть экземпляр, это отдельный объект, который хранится где-то еще.Например, это может быть в куче другого поколения.Это также означает, что экземпляры могут собираться мусором независимо (при условии, конечно, что экземпляр AssocClass не ссылается на экземпляр BaseClass).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...