【问题标题】:Why java doesn't support multiple inheritance, though all the java method are virtual by default? [closed]为什么java不支持多重继承,尽管所有java方法默认都是虚拟的? [关闭]
【发布时间】:2013-10-25 09:14:20
【问题描述】:

为什么 Java 不支持多重继承,尽管所有 java 方法默认都是虚拟的?为什么Java会出现钻石问题?

【问题讨论】:

  • 只有 Sun Microsystems 的人才能回答这个问题。
  • 去除多重继承以去除复杂性的想法..
  • 多重继承的问题(嗯,一个的问题)是名称冲突,它与默认的虚拟方法无关。
  • 正如 TJ 的附录所说:不要将虚拟 方法 与 C++ 虚拟 继承 混淆。

标签: java diamond-problem


【解决方案1】:

James Gosling(被誉为Java之父)说:

JAVA 省略了 C++ 中许多很少使用、难以理解、令人困惑的特性,这些特性在我们的 经验带来的痛苦多于好处。这主要包括运算符重载 (虽然它确实有方法重载)、多重继承和广泛的自动 强制。

参考:http://javapapers.com/core-java/why-multiple-inheritance-is-not-supported-in-java/

所以据他说,他们根本不想添加它,因为他们认为这是一个坏主意。

附:使用多个接口与多重继承不同。

【讨论】:

    【解决方案2】:

    Diamond 问题不能在 Java 中出现,因为它不可能有多重继承。

    【讨论】:

      【解决方案3】:

      我认为限制多重继承编程和消除复杂性导致的开发错误是 sun 的任意决定

      【讨论】:

      • 是的,这就是所谓的钻石问题,因此是这个问题。
      【解决方案4】:

      因为接口比具体类提供了灵活性,我们可以选择使用单个类来实现多个接口。这是我们一致同意的两个蓝图来创建一个类。让我们看看java的漂亮定义:

      JAVA: A simple, object oriented, distributed, interpreted, robust, secure, 
      architecture   neutral, portable, high performance, multithreaded, 
      dynamic language.
      

      再次重申,java 中不可能出现钻石问题,因为它不支持多重继承。

      【讨论】:

        猜你喜欢
        • 2010-11-01
        • 2011-04-15
        • 1970-01-01
        • 2016-04-18
        • 2014-03-04
        • 2014-03-31
        • 1970-01-01
        • 2015-11-11
        • 1970-01-01
        相关资源
        最近更新 更多