如何避免多重继承?

时间:2016-08-07 22:12:44

标签: java inheritance polymorphism

对于一个项目,我有以下课程:

  • 父类
  • 子类1
  • Subclass 2

这两个子类扩展了超类。 现在,我需要第三个类,它具有SubClass 1和Subclass 2的EXACT行为(读取,相同的重写方法实现)。 因为Subclass 1只覆盖了SuperClass中的1个方法,而Subclass 2没有覆盖该方法,所以我想让第三个类继承Superclass并使用Subclass 1和Subclass 2的方法实现它。现在,这个好吗OO设计?我没有看到其他解决方案,因为Java中的多重继承是不可能的。还有其他选择吗?

2 个答案:

答案 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 {}
}