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部分上面
答案 0 :(得分:0)
让我们按照说明进行操作。
- 在ZooTest.java
中将至少一种新动物类型添加到动物园 醇>
这需要在Animal
的子类中实现您的接口,并将其实例添加到zoo列表中。 e.g。
List<? extends Animal> zoo = new ArrayList<>();
zoo.add(new Fox());
zoo.add(new Dog());
zoo.add(new Bear());
// plus more?
- 创建宠物的数组或ArrayList
醇>
足够简单。创建一个以Pet
为类型的列表。列表对于这种情况更有意义。
List<Pet> pets = new ArrayList<>();
- 穿过动物园。如果动物也是宠物,请将其添加到宠物阵列
醇>
为了确定对象是否属于某种类型,我们可以使用instanceof
关键字。在检查之后,我们可以安全地投射到所需的类型。
if (animal instanceof Pet)
pets.add((Peg) animal);
- 通过宠物阵列(只应该有宠物)进行迭代,并让每只宠物做一些
醇>
似乎相当明显。迭代宠物清单。
for (Pet pet : pets) {
...
}