什么是将武器作为Abstract类的接口的优势

时间:2014-12-24 10:57:11

标签: java oop

enter image description here

问题陈述:勇士队在战场上与武器作战。

了解图像中的情况,

说,我们有一个实施武器的阶级战士。

武器可以延伸到剑,枪等。

我有一个困惑,无论武器应该是一个接口还是一个抽象类。

如果它需要是一个界面,那么它有什么优势。

[编辑]

如果它是一个界面我相信实现将是这样的。

Weapon myWeapon;
myWeapon = new Sword();

2 个答案:

答案 0 :(得分:2)

除了战士不是武器而是使用武器......; - )

  • 如果您希望拥有所有武器的公共代码,请使用抽象类。例如,如果经常使用武器,则打破武器的方法。
  • 界面只是一个模板,可以说本身无法实现 。 (见下面的评论:默认实施。)
  • 类也可以有多个接口,但Java中有无钻石继承,所以你只有一个基类。

答案 1 :(得分:1)

首先 - 战士绝对不应该实施武器。

实现接口或扩展类是 IS A 关系。枪是武器,但战士不是。他只使用武器,这是组合 - HAS A 的关系。

武器应该是一个界面

接口是告诉我们可以用实现该接口的类的对象做什么的东西。它没有告诉它是如何实现的。这种分离有利于您的清洁设计。

如果存在所有武器或其中一些共享的共同行为,则可以引入一个抽象类,该层次结构可以位于接口和具体实现之间。请注意这里(这是一个常见的错误),这种行为并不意味着添加新方法。因此,如果您认为可以重新加载枪,那么它需要另一种方法,抽象类在这里无法帮助。在这种情况下,您可以引入另一个界面,例如 Reloadable ,并使Gun实现Weapon和Reloadable。当一些具体类以相同或相似的方式实现某些接口方法时,常见的行为就是这样。然后,抽象类可以实现这一个方法,但其余的方法没有实现。