2012-06-17 30 views
0

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 */ 

} 
} 

回答

0

你的列表中的对象,现在只处理为对象。你需要明确地将它转换为某种类型。

例如:

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

为了确定名单会有什么样的对象,你可以做如下图所示:

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

    } 
} 
0

您可以使用它像..:

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

也许如果你编写父类(在你的榜样 - 水果):

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的类型。此列表将通过方法get()仅返回Fruit对象。在你的代码中,它将是Object,所以你必须将它转换为子对象,然后才能使用它。

或者在我的示例中,如果您想要对每个水果都使用相同的方法而不需要进行类型转换,只需使用所有相同的方法创建一个超类。

对不起,我的英文。

+0

+1:很好的解释和抽象。如果它解释类型转换而不是仅仅提供代码来使程序运行,这将是一个更好的答案。 –

2

方法list.get(0)返回一个Object参考,因此您必须向下投送它到apple。有点像这样:

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

然后调用函数。

注:这是一个很好的做法,在Java类的名字是用大写字母一样AppleOrange