作成することは可能ですか
ArrayList<Object type car,Object type bus> list = new ArrayList<Object type car,Object type bus>()
;
つまり、異なるクラスのオブジェクトを1つの配列リストに追加しますか?
ありがとう。
はい、それは可能です:
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);
}
}
ポリモーフィズムを利用してください。との親クラスVehicle
があるBus
としCar
ます。
ArrayList<Vehicle> list = new ArrayList<Vehicle>();
バスIS-A車両、車IS-A車両、および車両IS-A車両であるため、タイプBus
のオブジェクトをこのリストに追加できます。Car
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を使用します。