Java程序需要的建议

时间:2014-03-19 06:43:12

标签: java

我在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有人请告诉我??

3 个答案:

答案 0 :(得分:4)

myFarmArrayList<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中拥有的第一个对象