【发布时间】:2017-10-05 04:14:56
【问题描述】:
我发布了一个question,关于我在 Effective Java 中读到的接口和建议。我得到了我想要的答案,一切都很好,直到今天下午我登录 SO,并留下评论说
这些接口不应相互继承。
我问为什么,但仍然没有收到答案。有人可以解释为什么您不允许这些接口继承吗?您将如何修复它,并且仍然保留答案中提供的相同功能?
public interface GameObject {
void viewDetails();
}
public interface Weapon extends GameObject {
void attack();
}
//A weapon is not the only item reloadable. A container could be refilled.
public interface Reloadable extends GameObject {
void replenish (final int amount);
}
我看到这些接口不继承的唯一原因是GameObject 接口的简单性。它没有提供toString 无法完成的任何功能。然而,这只是我游戏的开始阶段,GameObject 当然会扩展。
【问题讨论】:
-
继承意味着“is-a”关系。因此,武器是游戏对象。如果根据您的模型这是正确的,那很好。但是如果一个武器有一个游戏对象,那么它应该有一个
GameObject getGameObject()方法。如果两者都不是,则它不应该extend也没有getGameObject()方法。 -
@AndyTurner - 但在我的游戏中,它“是一个”游戏对象。从逻辑上讲,对我来说,物品和武器就是游戏对象。我知道如果它不是 GameOject,它不应该扩展,但这里不是这种情况。
-
“如果根据你的模型是正确的,那很好”。这只是一个人的评论,他们不应该扩展,没有人同意支持它。
-
@AndyTurner - 你会为此获得赞成票!
标签: java oop inheritance interface