2

在 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循环。这是一种反模式吗?如果是,我为什么不这样做?

4

2 回答 2

2

你是对的,这感觉有些不对劲。在我看来,s 的集合object也不应该扩展它object

可能是您有一个拥有一些汽车的经销商,但我认为您会这样做(而且我不会 java,所以我可能会稍微搞砸语法):

class Dealership extends Businesses
{
    private private ArrayList<Car> sellableCars;

    public void itsAHugeSalesSpectacular() {
        for(Car car: sellableCars) car.Vrooom(); 
    }
}

但根据我的经验,没有理由将经销商的汽车本身定义为一个对象。

于 2013-06-20T04:27:53.470 回答
2

您正在继承汽车来代表汽车列表?你不需要这样做。如果您只是想要一个汽车列表,那么您可以创建

List<Car> list = new ArrayList<Car>();

继承意味着子类应该通过超类的 IS-A 测试,在您的情况下,汽车列表并不完全是汽车。

于 2013-06-20T04:28:02.020 回答