首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调用某个类的方法(继承)

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

Stack Overflow用户
提问于 2012-03-27 08:05:41
回答 3查看 107关注 0票数 0

我正在写一个小java游戏,里面有各种类型的怪物,几个电脑控制的玩家和一个人类控制的玩家。游戏世界是一个相当基本的2D网格。网格被声明为期望类人对象。这就是Humanoid [][] grid。但是,对于每种类型的字符,需要覆盖类人代码的各个部分。

我遇到的问题是,如果代码需要类人形,我如何调用人类特定的移动方法,以及如何检查移动的边界。

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

谢谢

注意:我的人形类没有move方法,因为我是为class这样做的,所以也不允许这样做。

EN

回答 3

Stack Overflow用户

发布于 2012-03-27 08:09:26

你不需要做任何事。如果您有一个具有move方法的Humanoid类,以及一个从Humanoid扩展而来的具有自己的move方法的Human类,当您调用move时,将使用人类的版本(如果您在人类实例上调用它)。

所以如果你这样做了

代码语言:javascript
复制
Humanoid human = new Human();
human.move();  // Human's move is invoked

Humanoid orc = new Orc();
orc.move(); // Orc's move is invoked

运行库自动调用适当的move方法。

票数 1
EN

Stack Overflow用户

发布于 2012-03-27 08:10:06

如果重写子类中的方法,则无需执行任何特殊操作即可调用它们。只需调用Humanoid变量上的方法,无论实例实际是什么类,都是要运行的方法的版本。

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

票数 0
EN

Stack Overflow用户

发布于 2012-03-27 08:13:42

继承的要点是,您不应该知道您正在操作哪个子类。例如,假设人类和怪物共享一个名为" Mobile“的基类,而Mobile有一个抽象方法"move”。人类可能会超越移动而在地图上行走,鸟类可能会超越移动而飞行,而陆地鲨鱼可能会在地下游泳。

问题是,您的映射只调用Mobile.move(),操作将被委托给实际的子类进行移动。

如果您必须知道您使用的是哪个类,那么您就做错了--然而,有时您需要知道一些关于这个类的信息,例如,如果地形是不能通过的,那么您可以调用Mobile.canFly()来查看给定的生物是否支持飞行。

后来,如果你决定人类可以通过咒语飞行,你只需修改人类类,其他一切都可以正常工作,但如果你测试了这个类,只允许"Vulture","Eagle“和"Dragon”飞越障碍物,那么如果你修改或添加它,你的代码就会变得更加混乱。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9881621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档