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