Аннотация vs Обычная производительность наследования классов - PullRequest
4 голосов
/ 30 мая 2009

Когда вы наследуете класс и создаете экземпляр подкласса, среда выполнения также создает экземпляр суперкласса, верно?

Поскольку абстрактные классы нельзя создавать экземплярами, разве они не создаются средой выполнения при создании экземпляра подкласса?

Если это так, то наследование абстрактного класса будет быстрее, чем обычного экземпляра класса?

Ответы [ 2 ]

12 голосов
/ 30 мая 2009

Среда выполнения никогда не создает отдельные экземпляры базового класса и производного класса - просто экземпляр производного класса также имеет все переменные и т. Д. Базового класса и запускает конструктор базового класса как часть инициализации. Здесь нет никакой разницы между "нормальными" базовыми классами и абстрактными базовыми классами.

8 голосов
/ 30 мая 2009

Я думаю, что вы перепутали некоторые детали.

Когда вы создаете объект, где класс этого объекта наследуется от другого класса, это не значит, что вы получаете два объекта в памяти.

Вы получаете только один, но в нем есть место для полей, которые поступают из обоих.

Другими словами, если исходному классу нужны 10 байтов для хранения его полей, а вашему унаследованному классу нужны 5 байтов для хранения его определенных полей, при создании объекта из унаследованного класса он будет занимать 15 байтов, где Первые 10 соответствуют полям из базового класса. (обратите внимание, это очень упрощенное объяснение, еще много чего зависит от фактического размера объектов).

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