我在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);,您将默认获得类型为ArraylistAnimal的第一个索引。并且您正在将值分配给NamedCow类型的对象。因此,您需要将值显式转换为NamedCow

在完整的代码中,NamedCow可能是Animal的超类。因此,超类(NamedCow)变量可以保存子类(Animal)对象,这是Java中继承的规则。

09-26 20:28