是否可以创建
ArrayList<Object type car,Object type bus> list = new ArrayList<Object type car,Object type bus>()
;
我的意思是将来自不同类的对象添加到一个数组列表中?
谢谢。
是的,有可能:
public interface IVehicle { /* declare all common methods here */ }
public class Car implements IVehicle { /* ... */ }
public class Bus implements IVehicle { /* ... */ }
List<IVehicle> vehicles = new ArrayList<IVehicle>();
该vehicles
列表将接受任何实现IVehicle
.
是的你可以。但是您需要一个对象类型的通用类。在你的情况下,这将是Vehicle
.
例如:
车辆等级:
public abstract class Vehicle {
protected String name;
}
巴士等级:
public class Bus extends Vehicle {
public Bus(String name) {
this.name=name;
}
}
车类:
public class Car extends Vehicle {
public Car(String name) {
this.name=name;
}
}
主类:
public class Main {
public static void main(String[] args) {
Car car = new Car("BMW");
Bus bus = new Bus("MAN");
ArrayList<Vehicle> list = new ArrayList<Vehicle>();
list.add(car);
list.add(bus);
}
}
使用多态性。假设您有一个and的父类Vehicle
。Bus
Car
ArrayList<Vehicle> list = new ArrayList<Vehicle>();
您可以添加类型的对象Bus
,Car
或Vehicle
添加到此列表,因为 Bus IS-A Vehicle、Car IS-A Vehicle 和 Vehicle IS-A Vehicle。
从列表中检索对象并根据其类型进行操作:
Object obj = list.get(3);
if(obj instanceof Bus)
{
Bus bus = (Bus) obj;
bus.busMethod();
}
else if(obj instanceof Car)
{
Car car = (Car) obj;
car.carMethod();
}
else
{
Vehicle vehicle = (Vehicle) obj;
vehicle.vehicleMethod();
}
不幸的是,您不能指定多个类型参数,因此您必须为您的类型找到一个公共超类并使用它。一个极端的情况是使用Object
:
List<Object> list = new ArrayList<Object>();
请注意,如果您检索项目,您需要将结果转换为您需要的特定类型(以获得完整功能,而不仅仅是通用功能):
Car c = (Car)list.get(0);
创建一个类并使用多态性。然后在点击中拾取对象,使用instanceof。