我正在玩组合和抽象方法和类....如果我在这里有动物,猫和狗类,我将如何使用组合使用动物列表创建另一个类???
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");
}
}
答案 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();
}
}