【发布时间】:2014-07-25 07:52:38
【问题描述】:
假设我已经使用方法 foo 和 bar 定义了接口 ISomeInterface。
例如。
public interface ISomeInterface {
public void foo();
public void bar();
}
假设我有 A 和 B 类,对它们来说,实现接口是有意义的。但是为foo() 设置不同的实现也没有任何意义。
考虑到从 B 派生 A 或从 A 派生 B 是不正确/奇怪的,这种设计是否有标准的编码实践?
我假设我可以创建一些实用程序类来实现foo() 并将其作为委托调用,但我想知道是否可以以不同方式处理整个结构
更新:
为了充分理解我的问题,我偶然发现了这个:http://perlbuzz.com/2010/07/why-roles-in-perl-are-awesome.html,我试图了解我们在 Java 中使用传统 OO 概念时是否缺少此功能
【问题讨论】:
-
你为什么不把你的接口变成一个抽象类并为 foo() 提供一个实现?
-
如果您使用的是 Java8,您可以提供 default implementation in the interface,或者您可以始终遵循敏捷宣言并通过创建可以执行该功能的协作者来选择 has-A 关系。 A 和 B 将与接口具有 is-A 关系,与协作者具有 has-A 关系。
-
@Dan Temple:查看更新
-
如果我理解正确,您正在寻找一种在 Java 中使用角色来表示多重继承的方法。正如文章中所指出的,Java 不支持多重继承,因此抽象类在这里不会有太大帮助。但是您可以实现多个接口,这可能有助于您获得角色的感觉。我想知道 Java8 中的默认方法是否实际上与 Perl5 中的默认实现相比较。
-
@DanTemple:我主要担心的是,老实说,我认为不需要“角色”。所以我想知道这是否是我们在 Java 中使用 OO 时的遗漏
标签: java class oop design-patterns interface