我在理解 OOP、抽象类和列表的方式时遇到了一些麻烦。我目前的项目在处理中——当然只是为了原型设计。
我的问题是我有一个包含一些相同变量的对象列表。所以我为它们创建了一个抽象类,然后是所有对象的列表(抽象类作为列表),然后将变体对象添加到“抽象”列表中。
这是代码 - 整个交易可以在下面找到:
ArrayList<Vehicle> vehicles = new ArrayList<Vehicle>();
void setup() {
vehicles.add(new Motorcycle());
vehicles.add(new Motorcycle(2,"Yamaha"));
vehicles.add(new Truck());
vehicles.add(new Truck(4,"ASU AC2",2));
print(vehicles);
vehicles.get(3).dropLastTrailer();
}
卡车:
class Truck extends Vehicle {
int numOfTrailers;
Truck() {
super();
numOfTrailers = 0;
}
Truck(int size, String name, int numOfTrailers) {
super(size, name);
this.numOfTrailers = numOfTrailers;
type = "Truck";
}
void dropLastTrailer() {
numOfTrailers--;
println("Dropped one trailer, the truck now got " + numOfTrailers + " trailers");
}
}
车辆:
abstract class Vehicle {
int speed, size;
String name;
String type;
Vehicle() {
this((int)random(0,6),"Unknown Vehicle");
type = "Vehicle";
}
Vehicle(int size, String name) {
this.size = size;
this.name = name;
}
String toString() {
return (name + " is " + size + "m long " + type);
}
}
代码一直有效,直到我尝试调用“dropLastTrailer”函数,它说该方法不存在。我想这是正确的,因为它认为它只是一个车辆对象,而不是卡车。
我怎样才能解决这个问题?
完整代码可以在这里找到: https ://github.com/Jalict/processing-experiments/tree/master/oop_abstract_list