对于一个项目,我有以下课程:
这两个子类扩展了超类。 现在,我需要第三个类,它具有SubClass 1和Subclass 2的EXACT行为(读取,相同的重写方法实现)。 因为Subclass 1只覆盖了SuperClass中的1个方法,而Subclass 2没有覆盖该方法,所以我想让第三个类继承Superclass并使用Subclass 1和Subclass 2的方法实现它。现在,这个好吗OO设计?我没有看到其他解决方案,因为Java中的多重继承是不可能的。还有其他选择吗?
答案 0 :(得分:9)
Java8为接口引入了默认和静态方法。在某种程度上,这允许多重继承。但最有可能的是,正确的解决方案是重新设计您的设计。
你知道,继承是不关于代码重用。它是关于创建有用的抽象;并充分利用多态性。例如。
在您的情况下:可能/应该将这些功能放入较小的接口中;然后分隔成自己的独立课程。然后使用组合对象而不是继承来构建您需要的东西。
答案 1 :(得分:4)
这是一个使用Java 8的默认方法的示例,如@GhostCat所述。我觉得这个OO设计本身没有任何问题。它是否适合您的使用案例取决于您要解决的问题的详细信息。
public class Main {
public static void main(String... args) {
SuperClass sc = new SubClass3();
sc.foo(); // overridden foo
sc.bar(); // overridden bar
}
interface SuperClass {
default void foo() {
System.out.println("default foo");
}
default void bar() {
System.out.println("default bar");
}
}
interface SubClass1 extends SuperClass {
@Override
default void foo() {
System.out.println("overridden foo");
}
}
interface SubClass2 extends SuperClass {
@Override
default void bar() {
System.out.println("overridden bar");
}
}
static class SubClass3 implements SubClass1, SubClass2 {}
}