对你来说这看起来像是一个虚假的问题,但我很难解决这个问题:
我们有一个抽象类Animal和Cat and Dog扩展它.在Animal中我们有一个方法produceSound();这是抽象的.正如你可能猜到的那样它应该归还“毛”和狗 – “宝”或类似的东西.这没关系,但现在我们必须在Animal类中编写一个静态方法,该方法根据声音返回Cat或Dog对象.例如:identifyAnimal(“Mao”)应该返回Cat.
问题:如何实现identifyAnimal(String sound)方法?
以下是层次结构的一些简单示例:
动物类
public abstract class Animal {
protected abstract String produceSound();
protected static void identifyAnimal(String animalSound) {
// TODO
}
}
猫类
public class Cat extends Animal{
@Override
protected String produceSound() {
return "Mao";
}
}
狗班
public class Dog extends Animal{
@Override
protected String produceSound() {
return "Bao";
}
}
考试班
public class AnimalTest {
public static void main(String[] args) {
Animal.identifyAnimal("Bao");
}
}
在AnimalTest类中调用Animal.identifyAnimal(“Bao”)时;我们应该得到一只狗.
解决方法:
private static Class[] animalTypes = [Dog.class, Cat.class];
public static String identifyAnimal(String animalSound)
{
for (int i = 0; i < animalTypes.length; i++) {
Animal a = animalTypes[i].newInstance();
String s = a.produceSound();
if (animalSound.equals(s))
return animalTypes[i].getName();
}
return null;
}
标签:java,oop
来源: https://codeday.me/bug/20190826/1730353.html