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 :(得分: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中的类名称为大写字母,如Apple
,Orange
答案 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);