9

是否可以创建 ArrayList<Object type car,Object type bus> list = new ArrayList<Object type car,Object type bus>()

我的意思是将来自不同类的对象添加到一个数组列表中?

谢谢。

4

5 回答 5

18

是的,有可能:

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.

于 2012-11-26T14:36:41.603 回答
9

是的你可以。但是您需要一个对象类型的通用类。在你的情况下,这将是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);
   }
}
于 2012-11-26T14:36:01.973 回答
7

使用多态性。假设您有一个and的父类VehicleBusCar

ArrayList<Vehicle> list = new ArrayList<Vehicle>();

您可以添加类型的对象BusCarVehicle添加到此列表,因为 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();
}
于 2012-11-26T14:37:18.547 回答
2

不幸的是,您不能指定多个类型参数,因此您必须为您的类型找到一个公共超类并使用它。一个极端的情况是使用Object

List<Object> list = new ArrayList<Object>();

请注意,如果您检索项目,您需要将结果转换为您需要的特定类型(以获得完整功能,而不仅仅是通用功能):

Car c = (Car)list.get(0); 
于 2012-11-26T14:39:10.993 回答
0

创建一个类并使用多态性。然后在点击中拾取对象,使用instanceof。

于 2015-09-29T12:59:45.853 回答