animalList使用组合

时间:2014-01-28 18:05:07

标签: java abstract composition

我正在玩组合和抽象方法和类....如果我在这里有动物,猫和狗类,我将如何使用组合使用动物列表创建另一个类???

public class SomeClass{

Animal animalList; // ?????

}

public abstract class Animal {


public abstract void sound();
}

public class Cat extends Animal {


        @Override
    public void sound() {

        System.out.println("cat makes sound");
    }
    }

public class Dog extends Animal {


    @Override
public void sound() {

    System.out.println("dog makes sound");
}
}

2 个答案:

答案 0 :(得分:1)

如果你正在尝试使用复合模式,看起来像这样。

http://en.wikipedia.org/wiki/Composite_pattern

interface Animal{
    void sound();
}

class CompositeAnimal implements Animal {
    List<Animal> animals;

    @Override
    public void sound() {
        for (Animal animal : animals) {
            animal.sound();
        }
    }
}

class Dog implements Animal {
    ...
}

class Cat implements Animal {
    ...
}

答案 1 :(得分:1)

我认为你想要的是这样的

public class AnimalList{
   private List<Animal> list;

   public addAnimal(Animal a)
   {
        if !(list instanceof List)
        {
             list = new List<Animal>();
        }
        list.add(a);
   }
   //.. other stuff .. //

}

但是我并不认为这是一种真正的构图关系。是列表有动物。但我认为这种关系更像AnimalList IS A List。

我认为组合的一个更好的例子就是一个类,例如具有宠物动物的人类。

public class Person{
     private Animal pet;
     public void poke_pet()
     {
          pet.sound();
     }
}

Reference