创建不同对象的实例列表并使用这些对象

时间:2012-06-17 19:00:02

标签: java list arraylist

Java代码:

import java.util.ArrayList;
import java.util.List;

class apple{
int price;

public void myFunction(int iPrice)
{
    price=iPrice;
}
}

class orange{
int price;

public void myFunction(int iPrice)
{
    price=iPrice;
}
}

public class main {

public static void main(String[] args) {
    List <Object> list= new ArrayList<>();

    //create 3 apple object to list
    list.add( new apple() );
    list.add( new apple() );
    list.add( new orange() );

    list.get(0). /* "get(0)." this isn't using apple object and my function */

}
}

4 个答案:

答案 0 :(得分:2)

如果您编写父类(在您的示例中为Fruit),也许对您来说会更容易:

class Fruit {
    int price;

    void myFunction(int price) {
        this.price = price;
    }
class Apple extends Fruit { }
class Orange extends Fruit { }

public static void main(String[] args) {
    List<Fruit> fruits = new ArrayList<>();

    //create 3 apple object to list
    fruits.add( new Apple() );
    fruits.add( new Apple() );
    fruits.add( new Orange() );

    Fruit f = fruits.get(0);
    f.myFunction(10); // now you can use methods writed in Fruit class

    // or if you want to cast it to child class:
    Apple apple = (Apple) f;

    // but if u not sure about fruit's class, check at first:
    if (f instanceof Apple) {
        System.out.println("first fruit is an apple");
    } else if (f instanceof Orange) {
        System.out.println("first fruit is an orange");
    } else {
        System.out.println("first fruit is some another fruit");
    }
}

此代码:List<Fruit> fruits = new ArrayList<>();表示列表中存储的所有对象必须是Fruit的类型或Fruit的子级。此列表将仅通过方法Fruit返回get()个对象。在您的代码中,它将是Object,因此您必须先将其强制转换为子对象,然后才能使用它。

或者在我的例子中,如果你想使用对于你不需要演员类型的每个水果都相同的方法,只需用所有相同的方法创建一个超类。

抱歉我的英文。

答案 1 :(得分:2)

方法list.get(0)会返回Object引用,因此您必须将其转发为apple。有点像这样:

apple a = (apple)list.get(0); 

然后调用该函数。

注意:优良作法是Java中的类名称为大写字母,如AppleOrange

答案 2 :(得分:0)

列表中的对象现在仅被视为对象。你需要明确地将它变成某种类型。

例如:

Apple a = (apple) list.get(0);

为了确定列表所包含的对象类型,您可以执行以下操作:

for (Object o : list) {
   if (o instanceof apple){
      // do something....
   }
   else if (o instanceof mango){
      // do something....

   }
}

答案 3 :(得分:0)

你可以像那样使用..:

 apple a=(apple)list.get(0); 
 a.myFunction(10);