Когда вы создаете объект B, скажем, вызывая конструктор по умолчанию
B myObject = new B();
Затем JVM выделяет объект с более или менее:
- Достаточно памяти для каждогополе явно объявлено в B (обычно около 4-8 байт на поле, но оно сильно отличается от типов и хост-системы)
- Достаточно памяти для каждого возможного поля, унаследованного A и его предками
- Достаточно памяти, чтобы содержать ссылку на вектор отправки (который также должен составлять около 4-8 байт)
Вектор отправки используется компилятором для хранения адреса каждого метода, который может быть вызванна данный объект, и это зависит от класса объекта, а не от экземпляра самого объекта (каждый объект B имеет один и тот же интерфейс в конце концов!)
Так что вам НЕ нужно выделять A, потому что естьнет отдельного объекта A. Вы не создаете 2 отдельных объекта.Когда вы создаете B, вы создаете «специализированную» версию A .., которую можно рассматривать как A с чем-то большим.Поэтому нужно выделить только B (но имейте в виду, что B также имеет все, что есть у его предков)