从ArrayList <object>获取对象

时间:2016-05-03 12:23:41

标签: java arraylist

我有3个类:一个名为Object1的抽象类和另外两个名为Object1Object2的{​​{1}}。

我创建了一个Object3 ArrayList类型 例如:

Object1

然后我在课程ArrayList<Object1> myArray=new ArrayList<Object1>(); Object2中创建了一些对象,并将它们添加到我之前创建的Object3中。问题是如何使用我在ArrayList中添加的对象来调用方法

3 个答案:

答案 0 :(得分:0)

根据建议,不要将您的类命名为Object。

您必须强制转换对象才能调用子类中声明的方法:

abstract class FirstClass {

    public void firstMethod() {

    }
}

class SecondClass extends FirstClass {

    public void secondMethod() {

    }
}

class ThirdClass extends FirstClass {

    public void thirdMethod() {

    }
}

....

public void run() {
    ArrayList<FirstClass> list = new ArrayList<>();
    list.add(new SecondClass());
    list.add(new ThirdClass());

    for (FirstClass obj : list) {
        obj.firstMethod(); //No cast needed

        if (obj instanceof SecondClass) {
            SecondClass objOfSecond = (SecondClass) obj;
            objOfSecond();
        }

        if (obj instanceof ThirdClass) {
            ThirdClass objOfThird = (ThirdClass) obj;
            objOfThird();
        }
    }
}

答案 1 :(得分:0)

选项1:如果您的基类(Object1)获得了方法,您可以在每个子类(Object2 / Obejct3)上调用它

选项2:如果要调用子类中未在基类中定义的方法,则需要将Object转换为Specific类以调用该方法。

示例:

for (Object1 myObject1 : myArray){
  if (myObject1 instanceof Object2){
    Object2 myObject2 = (Object2)myObject1;
    myObject2.myMethod();
  }
}

是的,不要将您的类命名为Object,因为此名称已被Java用作“基础/根对象”。

答案 2 :(得分:0)

这个问题有点难以理解,因为在Java中使用Object作为关键词,在谈论面向对象语言时具有特定含义的词,现在是一个特定的类,所以我将重命名我们正在谈论SomeObject

当声明SomeObject个对象的ArrayList时,它将如下所示:

List<SomeObject> myArray = new ArrayList<>();

然后添加SomeObject的实例:

myArray.add(new SomeObject());

然后您可以通过索引访问对象,并直接在该对象上调用方法。在这里,我调用someMethod类的SomeObject方法。

int i = 0; //used as index
myArray.get(i).someMethod();

请记住,如果SomeObject有子类(例如SomeOtherObject),则绝对允许您将SomeOtherObject的实例添加到SomeObject ArrayList中。但是,如果已向ArrayList添加了多个子类,则会遇到问题,然后尝试调用子类唯一的方法。

希望这有帮助!