java 简单对象_java – 简单的面向对象编程概念

对你来说这看起来像是一个虚假的问题,但我很难解决这个问题:

我们有一个抽象类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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值