2012-06-17 22 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