我在Java中创建了一个名为Farm的类,其中包含一系列动物(牛,猪和小鸡)。 myFarm是Farm类的一个对象数组,包含NamedCow,pig和chick类的对象。
我的示例代码在这里:
import java.util.*;
class Farm
{
private ArrayList< Animal > myFarm;
Farm()
{
myFarm=new ArrayList<Animal>();
myFarm.add(new NamedCow("cow","Elsie","moo"));
myFarm.add(new Chick("chick","cheep","cluck"));
myFarm.add(new Pig("pig","oink"));
}
public void animalSounds(){
Animal temp;
for(int i = 0; i < myFarm.size(); i++){
temp = myFarm.get(i);
System.out.println(temp.getType() + " goes " + temp.getSound());
}
NamedCow named = (NamedCow)myFarm.get(0);
System.out.println(named.getName());
}
}
我的代码中没有理解一行:NamedCow named =(NamedCow)myFarm.get(0); 这里括在右侧括号内的NamedCow是什么意思。 Cn有人请告诉我??
答案 0 :(得分:4)
myFarm
是ArrayList<Animal>
。
在第
行NamedCow named = (NamedCow)myFarm.get(0);
您假设ArrayList
中第一个索引中的对象属于类型 NamedCow
,基于该假设,您<\ n> em>将对象从Animal
投射到NamedCow
。
演员表插入运行时检查named
是否已分配NamedCow
,请注意,如果该不,则将抛出运行时异常。
我强烈建议您阅读有关Inheritance的教程,以便更好地了解它,因为它确实是编程的基础。
答案 1 :(得分:0)
它只是类型铸造。
通过编写myFarm.get(0);
,您将默认获得Arraylist
类型Animal
的第一个索引。并且您将值分配给类型为NamedCow
的对象。因此,您需要将值明确地转换为NamedCow
。
在完整代码中,NamedCow
可能是Animal
的超类。因此,超类(NamedCow
)变量可以包含子类(Animal
)对象,这是Java中的继承规则。
答案 2 :(得分:0)
使用Instance Of运算符检查您获得的对象是否被命名为cow或pig或chick 基于那样做你不得不做的事情
使用Debugger&amp;检查你在MyFarm ArrayList Of Animals中拥有的第一个对象