如何调用某个类方法(继承)

时间:2012-03-27 00:05:41

标签: java inheritance

我正在写一个小型的Java游戏,其中有各种类型的怪物,几个计算机控制的玩家和一个人控制的玩家。游戏世界是一个相当基本的2D网格。声明网格,以便它期望Humanoid对象。也就是Humanoid [][] grid。但是,对于每种类型的角色,都需要覆盖人形代码的各个部分。

我遇到麻烦的是如果代码期望Humanoids以及如何检查运动的界限,我怎么能调用人类特定的移动方法。

如果有什么不清楚,请告诉我。

由于

注意:我的人形类没有移动方法,并且由于我正在为类执行此操作,因此不允许使用

3 个答案:

答案 0 :(得分:1)

您无需做任何事情。如果您有Humanoid课程,move方法,Human课程,Humanoid课程,move,并且有自己的move方法Humanoid human = new Human(); human.move(); // Human's move is invoked Humanoid orc = new Orc(); orc.move(); // Orc's move is invoked 将使用Human的版本(如果您在Human实例上调用它)。

所以,如果你这样做

{{1}}

运行时自动调用适当的移动方法。

答案 1 :(得分:0)

如果覆盖子类中的方法,则不必执行任何特殊操作即可。只需在Humanoid变量上调用方法,无论实例是什么实际类,都是将运行的方法的版本。

您可能希望使用抽象方法使Humanoid成为抽象类,必须在子类中定义,或者甚至是接口。但即使您在Humanoid中使用代码定义了一个方法,然后在子类中使用不同的代码覆盖相同的方法,它也会起作用。当您调用它的对象是子类的实例时,子类的方法版本将运行,即使您的变量类型为Humanoid,而不是子类。

答案 2 :(得分:0)

继承的一点是,您不必知道您正在操作哪个子类。例如,假设人类和怪物共享一个名为“Mobile”的基类,而Mobile有一个抽象方法“移动”。人类可能会超越移动以穿过地图,鸟类可能会覆盖它以便飞行,而陆地人可能会在地下游泳。

事实是,你的地图只调用Mobile.move(),动作将委托给实际的子类进行移动。

如果你必须知道你正在使用哪个课程,那么你做错了 - 但是有时你需要知道关于课程的一些事情,例如,如果地形无法通行,那么你可以调用Mobile.canFly()看看给定的生物是否支持飞行。

之后,如果你决定人类可以通过咒语飞行,你只需修改人类,其他一切都可以正常工作,但如果你测试了这个类,只允许“秃鹫”,“鹰”和“龙”飞过一个障碍,那么如果你改变它或添加它你的代码是很麻烦的。