问题陈述:勇士队在战场上与武器作战。
了解图像中的情况,
说,我们有一个实施武器的阶级战士。
武器可以延伸到剑,枪等。
我有一个困惑,无论武器应该是一个接口还是一个抽象类。
如果它需要是一个界面,那么它有什么优势。
[编辑]
如果它是一个界面我相信实现将是这样的。
Weapon myWeapon;
myWeapon = new Sword();
答案 0 :(得分:2)
除了战士不是武器而是使用武器......; - )
答案 1 :(得分:1)
首先 - 战士绝对不应该实施武器。
实现接口或扩展类是 IS A 关系。枪是武器,但战士不是。他只使用武器,这是组合 - HAS A 的关系。
武器应该是一个界面
接口是告诉我们可以用实现该接口的类的对象做什么的东西。它没有告诉它是如何实现的。这种分离有利于您的清洁设计。
如果存在所有武器或其中一些共享的共同行为,则可以引入一个抽象类,该层次结构可以位于接口和具体实现之间。请注意这里(这是一个常见的错误),这种行为并不意味着添加新方法。因此,如果您认为可以重新加载枪,那么它需要另一种方法,抽象类在这里无法帮助。在这种情况下,您可以引入另一个界面,例如 Reloadable ,并使Gun实现Weapon和Reloadable。当一些具体类以相同或相似的方式实现某些接口方法时,常见的行为就是这样。然后,抽象类可以实现这一个方法,但其余的方法没有实现。