【问题标题】:Need more logical answer to "Why Java has no multiple inheritance" [duplicate]需要更合乎逻辑的答案来回答“为什么 Java 没有多重继承”[重复]
【发布时间】:2012-07-28 18:07:02
【问题描述】:

可能重复:
Why there is no multiple inheritance in Java, but implementing multiple interfaces is allowed

到目前为止,我看到的关于“为什么 Java 没有多重继承”的每个答案都只有一个更具体或更详细的答案,即“降低复杂性”,但没有人定义它如何降低复杂性,如果我们改用接口类它有什么区别。难道不是一回事吗?如果我们实现一个接口而不扩展我们的类有什么区别?有人回答钻石问题,但接口也可能产生钻石问题。

【问题讨论】:

    标签: java


    【解决方案1】:

    接口不附带代码:只有一组必须实现的方法。

    类带有代码。当您遇到类的菱形问题时,您最终会得到两个实现用于同一个函数,它们可能引用相同变量。

    对于接口,只有一种实现,尽管接口可以来自很多地方。

    【讨论】:

      【解决方案2】:

      接口与类之间的多重继承之间的区别在于何时必须继承实现。通过多条路径继承方法接口时,可以说实现类必须实现继承的方法。当您从多个类继承时,您必须决定选择几个实现中的哪一个。这极大地增加了语言的复杂性,正如您可以通过检查 C++ 中实现多重继承的方式看到的那样。

      这是一个插图:

      public class Base {
          public void foo() {System.out.println("base");}
      }
      public class A extends Base {
          public void foo() {System.out.println("a");}
      }
      public class B extends Base {
          public void foo() {System.out.println("b");}
      }
      public class AB extends A, B /* imagine that it's a possibility */{
      }
      

      当你这样做时会发生什么?

      AB ab = new AB();
      ab.foo();
      

      通过接口继承,AB 必须实现foo;通过实现的继承,语言将需要决定或为您提供一种自己指定它的方法。无论哪种方式,复杂性都会增加。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-15
        • 1970-01-01
        • 2015-02-22
        • 1970-01-01
        相关资源
        最近更新 更多