В Java мы могли бы иметь (предположим, что дополнительные методы конструктора и т.д.):Подкласс как набор классов
class Car
{
public void Vrooom() { System.out.print("Vrooom!"); }
}
class Prius extends Car
{
public void Vrooom() { System.out.print("..."); }
}
class Cars extends Car
{
private ArrayList<Car> mCars;
public void Vrooom() { for(Car car: mCars) car.Vrooom(); }
}
я наткнулся на код делает что-то вроде этого, но Cars
не чувствует себя хорошо мне, как он должен переопределить каждый метод Car
, чтобы добавить цикл for
. Это анти-шаблон, и если да, то почему я не должен этого делать?
Наследование должно представлять отношения is-a. Обычно вы не говорите, что множество автомобилей - это автомобиль. –
Я согласен с @VaughnCato, как правило, вы расширяете свой класс 'Cars' от типа массива (или любого другого эквивалентного класса java) или просто используете общий список на своем месте (если вам не нужен сильно- типизированное представление с помощью вспомогательных методов и т. д.). Кроме того, почему вы не должны этого делать, расширив «Автомобиль», вам ничего не мешает добавить «Автомобили» в ваш список. В конце концов, вы говорите: «Автомобили - это автомобиль». – Joshua