1

我有 3 个类(Car(超类)、CarToRentCarToSell(扩展汽车)。

我正在制作一个界面(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>();

其次,如果你有一个超类,列表属性不应该用于超类,而是用于支持所有该类生成的模板。让我们看一个示例:您有一个以不同方法返回 aList<CarToRent>和 a的 DAO 类。List<CarToSell>稍后,在商务舱中,您需要阅读 a 的所有元素并将汽车的 aList<Car>用于price某些公式。你会创建一个方法来转换 from List<CarToRent>toList<Car>和一个 for List<CarToSell>toList<Car>吗,如果以后你需要为 a 创建一个新的 like 子级,Car你会创建第三个转换器吗?因此,您可以使用that 为您做“肮脏的工作”,而不是所有的痛苦:WreckedCarCarWorkshopList<? 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汽车。它可以定义 getter 和设置方法,List但不应该定义它。实现接口的具体类应该定义List.

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