在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
循环。这是一种反模式,如果是这样,我为什么不这样做呢?
答案 0 :(得分:2)
你是对的,有些事情感觉错了。在我看来,object
的集合不应该扩展object
。
可能是你有经销商持有一些汽车的情况,但我认为你会这样做(而且我不是java所以我可能会搞砸一些语法):
class Dealership extends Businesses
{
private private ArrayList<Car> sellableCars;
public void itsAHugeSalesSpectacular() {
for(Car car: sellableCars) car.Vrooom();
}
}
但根据我的经验,你没有理由将经销商的汽车本身定义为一个对象。
答案 1 :(得分:2)
您是否继承汽车代表汽车列表?你不需要这样做。如果您只想要一个汽车列表,那么您可以创建
List<Car> list = new ArrayList<Car>();
继承意味着子类应该通过超类的IS-A测试,在您的情况下,汽车列表并不完全是汽车。