【发布时间】:2015-06-09 09:28:34
【问题描述】:
我正在开发一个需要我使用多态概念的项目 atm。
我有这个问题:
假设我有一个代表所有哺乳动物的接口,然后我创建以下子类:人类和鲸鱼。
想象一下,现在我想在我的程序中创建一些人类和一些鲸鱼,我会将它们放在一系列哺乳动物中。
问题是,子类Human 有solveMathProblem() 方法,而Whale 类没有它,因此哺乳动物也没有。
如何在数组中使用该方法?(例如:mammals[2].solveMathProblem();)
这行不通,因为哺乳动物界面中没有指定 solveMathProblem(),因为只有人类才能做到)
我能做些什么来完成这项工作?
【问题讨论】:
-
由于您只有哺乳动物类型的实例,因此您不能使用任何未在此类型中定义的方法。如果要使用子类型方法,则需要将对象转换为 Human,如果对象不适合新类型,则会失败(通过抛出异常)。
instanceof运算符也可能会有所帮助。 -
您可以像
((Human)mammals[2]).solveMathProblem();一样使用强制转换,但要确保mammals[2]您需要先检查if (mammals[2] instanceof Human)。还必须经常使用强制转换意味着您的项目应该重新设计,因为 强制转换 不是多态性。 -
@Joao,虽然不是强制性的,但接受一个帮助您回答问题的答案并没有什么坏处[作为对那些花费空闲时间免费帮助您的人表示感谢:)]
标签: java