1

私には3つのクラス(Car(スーパークラス)、CarToRentCarToSell(拡張Car))があります。

インターフェイス(CarCompany)を作成していて、そのArrayList中にタイプの車を格納したいと思います。どうすればよいですか?助けてください?

4

4 に答える 4

3

インターフェイスでは、デフォルトですべての属性に final 修飾子があるため、属性を設定することはできません。そのため、インターフェイスのgetandsetメソッドを宣言するだけです。実装者が属性を持ち、それらのメソッドをオーバーライドするようにします。

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>CarWreckedCarCarWorkshopList<? 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));
    }
}
于 2012-04-16T16:28:18.877 に答える
1

ArrayList<CarCompany>インターフェイスを実装するクラスからのあらゆる種類のオブジェクトを格納できるようにを作成する必要がありCarCompanyます。

于 2012-04-16T16:24:15.550 に答える
0
import java.util.ArrayList;

ArrayList<TYPE> al = new ArrayList<TYPE>();
so if you need CarCompany
eg.
ArrayList<CarCompany> al = new ArrayList<CarCompany>();

Class ArrayListに関するこのドキュメントもご覧ください

于 2012-04-16T16:33:36.097 に答える
0

あなたの車interfaceを持ってはいけません。Listの取得メソッドと設定メソッドをList定義することはできますが、定義しないでください。インターフェイスを実装する具象クラスは、List.

public class CarCompany{
    private List<Car> myList = new ArrayList<Car>();
}
于 2012-04-16T16:33:45.333 に答える