我正在解决一个问题,即不同的动物类型从 Animal 接口实现相同的 talk() 方法。
如果您查看getAnimal()
方法,您会发现,当将一种新的动物添加到程序中时,该方法的内部也必须更改。
我想通过继承 Animal 来添加新动物,而不改变现有类中的任何内容。
例如,添加一个动物“狗”,criteria="loyal";谈话=“汪汪”。
你能告诉我,这怎么可能?下面是我的代码:
interface Animal {
public void talk();
}
class Lion implements Animal {
@Override
public void talk() {
System.out.println("ROARRRRR");
}
}
class Mouse implements Animal {
@Override
public void talk() {
System.out.println("SQUEEEEEAK");
}
}
class Bison implements Animal {
@Override
public void talk() {
System.out.println("BELLOWWWWW");
}
}
class AnimalType {
public static Animal getAnimal(String criteria) {
// I refactor this method
if (criteria.equals("small")) {
return new Mouse();
} else if (criteria.equals("big")) {
return new Bison();
} else if (criteria.equals("lazy")) {
return new Lion();
}
return null;
}
}
public class AnimalExamples {
public static void main(String[] args) {
AnimalType.getAnimal("small").talk();
AnimalType.getAnimal("big").talk();
AnimalType.getAnimal("lazy").talk();
// how to add an animal "Dog" here, criteria="loyal"; talk="woof"
AnimalType.getAnimal("loyal").talk();
try {
AnimalType.getAnimal("small").talk();
} catch (Exception ex) {
System.out.println("Animal does not exists");
}
}
}
我在谷歌上搜索,了解它可以通过反射来完成。但不知道如何。如果可能的话,你能帮我解决这个问题吗?提前致谢!