我正在开发我的 java 项目,这是一个基本的角色扮演游戏,我有一个 OOD 问题(我想这很简单,但这是我的第一个 java 项目)。我开始研究武器,我创建了一个抽象 Weapon 类,其中包含一个名为 Attack 的抽象方法。 Weapon有两个子类——MeleeWeapon和RangedWeapon,都有攻击方法,还好。
然后我想到了另一件事 - 如果像矛这样的近战武器物体可以用于近战并且还可以 throw 会发生什么?在这种情况下,什么是好的解决方案?
最佳答案
一种选择是使用组合而不是继承。
每种武器都可以提供一组攻击。例如,Weapon.getAttacks()
返回一组受支持的攻击。在子类中,Spear.getAttacks()
返回 Thrust
、Throw
和 BashBashBash
的实例。
这允许您使用多种武器进行相同的攻击。狼牙棒和长矛都可以提供重击攻击——只是生命值伤害不同。您可以用长矛或 10 英尺长的杆子进行刺击。你可以扔一本咒语书。 (这些事情比你想象的更有害。)一般来说,你可以定义任何对象的任何操作的结果。
关于Java——抽象类和接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33554916/