java ArrayList包含不同的对象

java ArrayList包含不同的对象,java,object,arraylist,Java,Object,Arraylist,是否可以创建 ArrayList list=new ArrayList() 我的意思是将不同类的对象添加到一个arraylist 谢谢。是的,你可以。但是您需要一个通用类来定义对象类型。在您的情况下,这将是车辆 例如: 车辆类别: public abstract class Vehicle { protected String name; } 巴士等级: public class Bus extends Vehicle { public Bus(String name) {

是否可以创建
ArrayList list=new ArrayList()

我的意思是将不同类的对象添加到一个arraylist


谢谢。

是的,你可以。但是您需要一个通用类来定义对象类型。在您的情况下,这将是
车辆

例如:

车辆类别:

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);
   }
}
公共类主{
公共静态void main(字符串[]args){
汽车=新车(“宝马”);
公共汽车=新公共汽车(“人”);
ArrayList=新建ArrayList();
列表。添加(car);
列表。添加(总线);
}
}
是的,有可能:

public interface IVehicle { /* declare all common methods here */ }
public class Car implements IVehicle { /* ... */ }
public class Bus implements IVehicle { /* ... */ }

List<IVehicle> vehicles = new ArrayList<IVehicle>();
public interface IVehile{/*在此声明所有常用方法*/}
公共类Car实现IVehile{/*…*/}
公共类总线实现IVehile{/*…*/}
列出车辆=新的ArrayList();

vehicles
列表将接受实现
i车辆的任何对象
使用多态性。假设您有一个用于
Bus
Car
的父类
Vehicle

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

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

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

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

这正是我现在要做的,但是我如何从扩展类中访问方法?这是否正确?第二个数组值是objectType,所以我这样做。”ArrayList items=新建ArrayList();while((strLine=br.readLine())!=null){String s[]=strLine.split(\\\\);if(s[2].equals(“奥迪”){Audi myAud=new Audi(s[0],s[1],s[2],s[4]);items.add(myAud);}else if(s[2].equals(“宝马”){BMW myBmw=new BMW(s[0],s[1],s[2],s[2],s[4]);items.add(myAud);,els[2],els[2]如果(s[2]等于新欧宝[2],s[1],myopel]s[3],s[3]);items],s[4]);items.add(myOpe);}否则如果(s[2].equals(“Mazda”){Mazda myMaz=new Mazda(s[0],s[1],s[2],s[3]);items.add(myMaz);}好的,当我从文件中读取行时,我不知道读取了什么对象。我有字符串数组,我需要根据文件中的属性将其分配给正确的对象。这无法通过此实现直接解决。您可以在
Vehicle
类中使用名为
createVehicle
的函数,该函数将尝试解析输入字符串,并创建适当的对象。例如,该功能可以查找车辆制造商-如果它是
宝马
,则这是
汽车
,在其他情况下,它是
公共汽车
。这是否正确?第二个数组值是objectType,所以我这样做。”ArrayList items=新建ArrayList();while((strLine=br.readLine())!=null){String s[]=strLine.split(\\\\);if(s[2].equals(“奥迪”){Audi myAud=new Audi(s[0],s[1],s[2],s[4]);items.add(myAud);}else if(s[2].equals(“宝马”){BMW myBmw=new BMW(s[0],s[1],s[2],s[2],s[4]);items.add(myAud);,els[2],els[2]如果(s[2]等于新欧宝[2],s[1],myopel]s[3],s[3]);items],s[4]);items.add(myOpe);}else如果(s[2].equals(“马自达”){Mazda myMaz=新马自达(s[0],s[1],s[2],s[3]);items.add(myMaz);}是的,在那些行中。但是在这里你需要对所有的汽车制造商进行分类,这需要很多时间,而且它不是模块化的。所以我会坚持使用表示法,这里有class
Car
。然后在构造一个对象时,您可以调用
新车(s[0],s[1],s[2],s[3],s[4])
,其中
s[2]
显然是汽车品牌。有关这一点,请参阅。您需要实现自定义
比较器
。谢谢,但在我的情况下,我无法使用此解决方案,因为我从数组中读取属性,并且不知道从文件中获取什么对象。
List<Object> list = new ArrayList<Object>();
Car c = (Car)list.get(0);