私には3つのクラス(Car(スーパークラス)、CarToRent、CarToSell(拡張Car))があります。
インターフェイス(CarCompany)を作成していて、そのArrayList
中にタイプの車を格納したいと思います。どうすればよいですか?助けてください?
インターフェイスでは、デフォルトですべての属性に final 修飾子があるため、属性を設定することはできません。そのため、インターフェイスのget
andset
メソッドを宣言するだけです。実装者が属性を持ち、それらのメソッドをオーバーライドするようにします。
public interface CarCompany {
List<? extends Car> getCarList();
void setCarList(List<? extends Car> carList);
}
アップデート:
まず、ArrayList
代わりにインターフェイスを使用して、そのList
インターフェイスをArrayList
実装しても、使用しないでください (これに関する詳細: 「インターフェイスにプログラムする」とはどういう意味ですか? ):
List<Car> carList = new ArrayList<Car>();
第 2 に、スーパークラスがある場合、list 属性はスーパークラス用ではなく、そのすべてのクラス生成をサポートするテンプレート用にする必要があります。これのサンプルを見てみましょう: aList<CarToRent>
と aList<CarToSell>
を異なるメソッドで返す DAO クラスがあります。後で、ビジネスクラスで、 a のすべての要素を読み取り、式のために車の をList<Car>
使用する必要があります。toとtoprice
を変換するメソッドを作成しますか? 後でlikeの新しい子を作成する必要がある場合は、3 つ目のコンバーターを作成しますか? したがって、そのすべての苦痛の代わりに、その「汚い仕事」を行う を使用できます。List<CarToRent>
List<Car>
List<CarToSell>
List<Car>
Car
WreckedCar
CarWorkshop
List<? extends Car>
public void executeSomeFormula(List<? extends Car> carList) {
//getting the actual VAT value (just for a sample);
double actualVAT = getActualVATValue();
//every object in the list extends Car, so it can be threatened as a Car instance
for(Car car : carList) {
car.setTotalPrice(car.getPrice() * (1 + actualVAT));
}
}
ArrayList<CarCompany>
インターフェイスを実装するクラスからのあらゆる種類のオブジェクトを格納できるようにを作成する必要がありCarCompany
ます。
import java.util.ArrayList;
ArrayList<TYPE> al = new ArrayList<TYPE>();
so if you need CarCompany
eg.
ArrayList<CarCompany> al = new ArrayList<CarCompany>();
Class ArrayListに関するこのドキュメントもご覧ください
あなたの車interface
を持ってはいけません。List
の取得メソッドと設定メソッドをList
定義することはできますが、定義しないでください。インターフェイスを実装する具象クラスは、List
.
public class CarCompany{
private List<Car> myList = new ArrayList<Car>();
}