Вы имеете в виду создание "ссылки суперкласса на объект подкласса?"Этот вопрос, по-видимому, имеет больше смысла (и заключается в том, что делает код), поскольку вы действительно (или потенциально можете) потерять некоторую функциональность из-за методов, которые недоступны в суперклассе.
Если это так,это из-за абстракции - если у вас много машин, и вы хотите, чтобы они drive()
, вам просто нужно относиться к ним как к автомобилям.Вам не нужно выяснять, какой тип машины они используют, и у вас есть дополнительные методы (например, massage()
на некоторых автомобилях). Конечно, в этом случае снижение рейтинга даст вам больше методов для игры.но это просто ненужная сложность, которую вы не собираетесь использовать.
Это также общий супертип - если вы перебираете список saabs, vauxhalls и fords, вы можете поместить их все в List<Car>
иитерируйте их как Cars
.
На верхнем уровне вы можете просто иметь интерфейс Drivable
и ссылаться на все автомобили с этим.Таким образом, в приведенном выше примере вы можете получить все, что водит, - автомобиль или нет - и вам никогда не понадобится знать больше деталей, чем нужно, а также расширить сферу охвата всего, что водит, а не только автомобилей.)