9

作成することは可能ですか ArrayList<Object type car,Object type bus> list = new ArrayList<Object type car,Object type bus>();

つまり、異なるクラスのオブジェクトを1つの配列リストに追加しますか?

ありがとう。

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

ポリモーフィズムを利用してください。との親クラスVehicleがあるBusとしCarます。

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

バスIS-A車両、車IS-A車両、および車両IS-A車両であるため、タイプBusのオブジェクトをこのリストに追加できます。CarVehicle

リストからオブジェクトを取得し、そのタイプに基づいて操作します。

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 に答える