我在Java中创建了一个名为Farm的类,其中包含动物(牛,猪和小鸡)的列表。
myFarm是Farm类的对象数组,其中包含NamedCow,pig和ickick类的对象。
我的示例代码在这里:
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的含义。难道有人请告诉我吗?
最佳答案
它只是类型转换。
通过编写myFarm.get(0);
,您将默认获得类型为Arraylist
的Animal
的第一个索引。并且您正在将值分配给NamedCow
类型的对象。因此,您需要将值显式转换为NamedCow
。
在完整的代码中,NamedCow
可能是Animal
的超类。因此,超类(NamedCow
)变量可以保存子类(Animal
)对象,这是Java中继承的规则。