【问题标题】:Inheritance in Java languageJava语言中的继承
【发布时间】:2012-02-08 11:47:18
【问题描述】:

我们说 java 遵循单一继承模型,即一个 Java 类最多只能扩展一个类。然后说每个java类都继承自Object类。

假设有两个类 A 和 B。A 和 B 都从 Object 扩展而来。现在假设A继承了B,不是说A有多重继承吗(A既继承了B又继承了Class Object)?

【问题讨论】:

标签: java inheritance


【解决方案1】:

看看传递继承(C直接从B继承和从A传递)的区别:

和多重继承(C从A和B继承):

除了具有相同签名的方法被覆盖之外,所有内容都只是添加了。甚至添加了同名声明的变量,只是说它们是“隐藏的”,但仍然可以使用强制转换或 super 关键字(如果它是直接父级)来访问。

【讨论】:

    【解决方案2】:
    Excepting Object, which has no superclass, every class has one and |
    only one direct superclass (single    inheritance). In the absence of any
    other explicit superclass, every class is implicitly a subclass of Object.
    

    在您的问题中,A directly inherit BObject class 由 B 继承,而不是由 A.. 这称为 传递继承

    【讨论】:

      【解决方案3】:

      你可以有一个继承链,这不是多重继承。 您不能拥有一个一次从多个类继承的类。

      被语言禁止:

      class A extends B, C
      {}
      

      【讨论】:

        【解决方案4】:

        多重继承:(Java 不支持)

        A 类扩展对象

        B 类扩展对象

        C 类扩展 A、B

         Object
           /\
          /  \
         /    \
        A      B     (Not supported by Java)
         \     /
          \   /
           \ /
            C
        

        多级/传递继承:(Java支持)

        B 类扩展对象

        A 类扩展 B

         Object
            |
            |
            |
            B        (Supported by Java)
            |
            |
            |
            A
        

        【讨论】:

          【解决方案5】:

          Java 类只能直接从一个类继承。在这种情况下,A直接继承自 Object,仅继承自 A

          您是仅从术语的角度询问,还是您对某些行为感兴趣?

          【讨论】:

            【解决方案6】:

            对象 A 扩展对象 B,对象 B 扩展对象。不是多重继承,是层次结构

            【讨论】:

              【解决方案7】:

              多重继承的主要问题是歧义,当两个类定义相同的方法并且都被覆盖和diamond problem时。 Java 不会因此受到影响,因为它只允许覆盖单个类。这显然是指直接覆盖,而不是处理继承的层次结构。这种继承(A覆盖B,B覆盖等)不受任何问题的影响。

              【讨论】:

                【解决方案8】:

                在 Java 中,每个类只能直接一个父类扩展。所以,要么 B 从 Object 扩展,A 从 B 扩展,xor A 和 B 都从 Object 扩展。

                您假设两者同时为真 - 这在 Java 中是不可能的。

                如果 B 从 Object 扩展,A 从 B 扩展,那么是的,A 确实从 Object 继承,但每个类仍然有一个父类:

                class Object
                 |
                 +-- class B
                      |
                      +-- class A
                

                换句话说,Java 不支持多重继承。

                【讨论】:

                  【解决方案9】:

                  Java 不允许您扩展超过 1 个超类。但是,一个类可以实现多个接口。您可以创建接口和抽象类的结构,让您破解扩展多个类。祝你好运!

                  【讨论】:

                    猜你喜欢
                    • 2018-06-10
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-04-07
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多