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

}
}
4

4 回答 4

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,因此您必须先将其转换为子对象,然后才能使用它。

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

对不起我的英语不好。

于 2012-06-17T19:12:16.107 回答
2

该方法list.get(0)返回一个Object引用,因此您必须将其向下转换为apple. 有点像这样:

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

然后调用函数。

注意:Java 中的类名最好使用大写字母,例如Apple,Orange

于 2012-06-17T19:14:18.057 回答
0

你可以这样使用它..:

 apple a=(apple)list.get(0); 
 a.myFunction(10);
于 2012-06-17T19:08:02.867 回答
0

您在列表中的对象现在仅被视为对象。您需要将其显式转换为某种类型。

例如:

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

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

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

   }
}
于 2012-06-17T19:05:58.530 回答