在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,通常你會從一個數組類型(或任何等價的java類)擴展你的'Cars'類,或者只是在它的位置使用一個通用列表(如果你不需要一個強類型的類)用輔助方法鍵入表示等)。此外,爲什麼你*不應該*做到這一點,通過擴展'Car',沒有什麼能阻止你將'Cars'添加到你的列表中。畢竟,你說的是「汽車是汽車」。 – Joshua