问题陈述:战士们在战场上用武器战斗。
考虑图片中的情况,
比方说,我们有一个实施武器的阶级战士。
武器可能会延伸至剑,枪等。
无论是武器是接口还是抽象类,我都很困惑。
如果它需要是一个接口,那么它的优点是什么。
[编辑]
如果它是一个接口,我相信实现会像这样。
Weapon myWeapon;
myWeapon = new Sword();
最佳答案
所以首先-战士绝对不应该实施武器。
实现接口或扩展类是IS A关系。枪是武器,但战士不是。他只是使用武器,它是一种构图-HAS A关系。
武器可能应该是界面
接口是一种告诉实现该接口的类的对象可以做什么的东西。它并不能说明它是如何实现的。这种分隔对您的干净设计很有帮助。
如果存在所有武器或其中一些武器共有的共同行为,则可以引入一个抽象类,该抽象类在层次结构中可以位于接口和具体实现之间。注意此处(这是一个常见错误),行为并不意味着添加新方法。因此,例如,如果您认为可以重新装填枪支,因此需要另一种方法,那么抽象类在这里无济于事。在这种情况下,您可以引入另一个接口,例如Reloadable,并使Gun既实现Weapon又实现Reloadable。常见的行为只是某些具体类以相同或相似的方式实现某种接口方法时。然后,抽象类可以实现这一方法,而其余的则不实现。