【发布时间】:2015-11-05 21:15:15
【问题描述】:
我正在开发我的 java 项目,这是一个基本的角色扮演游戏,我有一个 OOD 问题(我想这很简单,但这是我的第一个 java 项目)。我开始研究武器,我创建了一个抽象的 Weapon 类,其中包含一个名为 Attack 的抽象方法。武器有两个子类——近战武器和远程武器,都有攻击方法,没问题。
然后我想到了另一件事——如果像长矛这样的近战武器物体可以用于近战,也可以投掷,会发生什么?在这种情况下,什么是好的解决方案?
【问题讨论】:
-
使用 Throwable 接口。
-
一种可能的解决方案:忘记抽象武器,创建一个
MeleeWeapon接口(使用meleeAttack方法)和一个RangedWeapon接口(使用rangedAttack方法)。现在一个类可以实现这两个接口。 -
@Turing85 ,我认为界面可以在这里提供帮助,但是我如何区分可以用作近战武器的剑和可以用作近战和远程武器的长矛?
-
另一种选择是使用组合而不是继承。每件武器都可以拥有一组攻击。例如,
Weapon.getAttacks()返回一组受支持的攻击。Spear.getAttacks()返回 Thrust、Throw 和 BashBashBash。 -
它实现了两者然后抛出一个 Throwable....
标签: java oop interface abstract-class