我需要在项目中使用多态和接口方面的帮助

时间:2017-05-10 03:59:50

标签: java

       package zootest;




public abstract class Animal 
{


   public int numberOfLegs;
   public boolean hasWings;


   public Animal(int n, boolean w) 
   {
      numberOfLegs = n;
      hasWings = w;
   }


   public abstract void talk();


   @Override
   public String toString()
   {
       return String.format("I am an animal.");
   }
}






 package zootest;


public interface Pet 
{
    public String getOwner();
    public void transferOwner(String newOwner);
    default void sayRandomword()
    {
        System.out.println("randomness");
    }

}







 package zootest;

import java.util.ArrayList; 

public class ZooTest {


    public static void main(String[] args) {




      Zoo myZoo = new Zoo();


      int dogs=0, eagles=0, birds=0;

      for(int i = 0; i < myZoo.getNumAnimals();i++)
      {
          if(myZoo.getAnimal(i) instanceof Eagle)
              eagles++;
          else if (myZoo.getAnimal(i) instanceof Bird)
              birds++;
          else if (myZoo.getAnimal(i) instanceof Dog)
              dogs++; 
      }
      System.out.println("Dogs = " + dogs +", Birds = " + birds + ", Eagles = " + eagles);


      System.out.println("\nROLL CALL!");
      for(int i = 0; i < myZoo.getNumAnimals();i++)
      {

        myZoo.getAnimal(i).talk();      
      }

      for(int i = 0; i < myZoo.getNumAnimals();i++)
      {
          if (myZoo.getAnimal(i) instanceof Dog)
          {

              myZoo.getAnimal(i).numberOfLegs = 3; 
          }
      }
      System.out.println();

      for(int i = 0; i < myZoo.getNumAnimals();i++)
      {
          if (myZoo.getAnimal(i) instanceof Eagle)
          {


              Eagle tempEagle = (Eagle)myZoo.getAnimal(i);
              tempEagle.attack();
          }
      }


      System.out.println("\nAdding another animal to show method in Zoo...");
      myZoo.addAnimal(new Bird());
      System.out.println("Total animals = " + myZoo.getNumAnimals());


      myZoo.addAnimal(new FrenchBulldog("Yohana"));

      Pet[] myPets = new Pet[myZoo.getNumAnimals()];


    }


}




    package zootest;


public class FrenchBulldog extends Dog implements Pet 
{
    private String owner;
    public FrenchBulldog(String o)
    {
        super();
        owner= o;
    }
    @Override
    public String getOwner()
    {
        return owner;
    }

    @Override
    public void transferOwner(String newOwner)
    {
        owner = newOwner;

    }
  }



    package zootest;


abstract class Horse extends Animal implements Pet 
{
    private String owner;
    public Horse (String o)
    {
            super(4,false);
            owner= o;
    }
    @Override
    public String getOwner()
    {
        return owner;
    }

    @Override
    public void transferOwner(String newOwner)
    {
        owner = newOwner;

    }
  }




 package zootest;

import java.util.ArrayList;

public class Zoo 
{

    private ArrayList<Animal> animals = new ArrayList<Animal>();

    public Zoo()
    {
        animals.add(new Eagle());
        animals.add(new Dog());
        animals.add(new Eagle());
        animals.add(new Bird());
        animals.add(new Eagle());
        animals.add(new Dog());
        animals.add(new Dog());
        animals.add(new Eagle());

    }

    public Animal getAnimal(int index)
    {
        return animals.get(index);
    }

    public int getNumAnimals()
    {
        return animals.size();
    }

    public void addAnimal(Animal a)
    {
        animals.add(a);
    }

}

第3部分:动物园宠物的多态处理 1.在ZooTest.java中将至少一种新动物类型添加到动物园 2.创建Pets的数组或ArrayList 穿过动物园。如果动物也是宠物,请将其添加到宠物阵列中 4.通过宠物阵列(只应该有宠物)进行迭代,并让每只宠物做一些事情 只有宠物才能做到

好吧所以基本上上面的代码是我的作业,到目前为止我已经创建了一个界面和两只宠物,这些是FrenchBulldog和一匹马,这基本上意味着我的一半作业已经完成但我需要帮助我写的第3部分上面

1 个答案:

答案 0 :(得分:0)

让我们按照说明进行操作。

  
      
  1. 在ZooTest.java
  2. 中将至少一种新动物类型添加到动物园   

这需要Animal的子类中实现您的接口,并将其实例添加到zoo列表中。 e.g。

List<? extends Animal> zoo = new ArrayList<>();
zoo.add(new Fox());
zoo.add(new Dog());
zoo.add(new Bear());
// plus more?
  
      
  1. 创建宠物的数组或ArrayList
  2.   

足够简单。创建一个以Pet为类型的列表。列表对于这种情况更有意义。

List<Pet> pets = new ArrayList<>();
  
      
  1. 穿过动物园。如果动物也是宠物,请将其添加到宠物阵列
  2.   

为了确定对象是否属于某种类型,我们可以使用instanceof关键字。在检查之后,我们可以安全地投射到所需的类型。

if (animal instanceof Pet)
    pets.add((Peg) animal);
  
      
  1. 通过宠物阵列(只应该有宠物)进行迭代,并让每只宠物做一些
  2.   

似乎相当明显。迭代宠物清单。

for (Pet pet : pets) {
    ...
}