这很难解释,但显示一段Ruby代码很简单:
有两个实现方法的模块:
module Foo
def one
print "ONE!"
end
end
module Bar
def two
print "TWO!"
end
end
Run Code Online (Sandbox Code Playgroud)
有一个包含它们的类:
class Test
include Foo
include Bar
end
Run Code Online (Sandbox Code Playgroud)
现在你的班级Test可以调用这两种方法.
据我所知,Java中没有这样的东西.关闭的概念是:
多重继承
这不受Java支持.
接口
他们是方法合同 - 没有实施.你的类Test需要实现方法本身,这就是我想要避免的.只是为了不写两次相同的代码(我有其他几个类,其中一些也可能想要实现这些方法).
抽象类
我仍然需要同时从两个类继承.
那么推荐的解决方案是什么?
在Java 8中你可以使用default方法实现这一点,但这绝不是defaults 的意图所以这可能是一个糟糕的建议:
interface Foo {
default void one () {
System.out.println("ONE!");
}
}
interface Bar {
default void two () {
System.out.println("TWO!");
}
}
class FooBar implements Foo, Bar {
}
public void test() {
FooBar fooBar = new FooBar();
fooBar.one();
fooBar.two();
}
Run Code Online (Sandbox Code Playgroud)
但是,我想重申@Thomas在评论中所说的内容.多重继承的需要往往是设计缺陷的标志.