Я собираюсь попытаться задать свой вопрос в контексте простого примера ...Как использовать композицию с наследованием?
Предположим, у меня есть абстрактный автомобиль базового класса. У автомобиля есть основной объект двигателя. У меня есть метод StartEngine() в абстрактном классе Car, который делегирует запуск движка объекту Engine.
Как разрешить подклассы автомобиля (например, Ferrari) объявить объект Engine определенным двигателем (например, TurboEngine)? Нужен ли мне еще один класс Car (TurboCar)?
Я наследую простой старый объект Engine, и я не могу повторно объявить (или переопределить) его как TurboEngine в моих подклассах Car.
EDIT: Я понимаю, что могу подключить любой подкласс Engine к ссылке myEngine в моем классе Ferrari ... но как я могу вызвать методы, которые предоставляет только TurboEngine? Поскольку myEngine унаследован как базовый движок, он не включен ни в один из компонентов turbo.
Спасибо!
Ooooh! Замечательно! Никогда не знал, что в SO есть тег car-analogy *! – 2011-11-17 20:22:17