【问题标题】:Java Doubt on Multiple inheritanceJava 对多重继承的质疑
【发布时间】:2011-09-26 09:36:37
【问题描述】:

Java 不支持多重继承,但默认情况下 Object 类是所有类的超类。 例如

class Object
{

}
class B
{

}
class A extends B
{
}

A类可以访问B和Object的所有方法,这不就是多继承的例子吗? 那么Java不支持多重继承是否正确。


我的问题不是要找出多级继承和多继承之间的区别。 Java Docs,它自己说:类对象是类层次结构的根。每个类都有 Object 作为超类。所有对象,包括数组,都实现了这个类的方法。 所以这意味着 Class Object 是 Class A{Previous example} 的超类。 但是B类也是A类的超类。 那么它的含义是什么?

【问题讨论】:

  • +1 似乎是一个关于多重继承含义的足够公平的问题

标签: java


【解决方案1】:

被称为Inheritance.transitivenature

【讨论】:

    【解决方案2】:

    看看transitive继承的区别(C直接继承自B,可传递自A):

    多重继承(C继承自AB):

    【讨论】:

    • 如果我错了,请纠正我。在问题中,B 类将 java.lang.Object 作为其超类,而 A 类将 B 类作为其超类。 Class B 和 Class 的继承关系是不是 java.lang.Object 在 Class A 处被屏蔽了。
    • 不,没有屏蔽,只是添加了所有内容,except 具有相同签名的方法,它们被 覆盖。即使使用相同名称声明的变量也会被添加,它们只是被称为“hidden”,但仍然可以使用强制转换或super 关键字(如果它是直接父级)来访问。不过,您永远都不想这样做,只需给变量起不同的名称,它们就会全部添加而没有任何隐藏。
    【解决方案3】:

    不,不是。多重继承是指一个类有多个直接基类,如:

    class A {}
    
    class B {}
    
    // not valid Java
    class C extends A, B {}
    

    一个类可能有许多间接基类,每个只有一个直接基类,如:

    class D extends A {}
    
    class E extends D {}
    
    class F extends E {}
    

    这里的继承层次是F -> E -> D -> A -> Object,但这仍然是单继承。

    【讨论】:

      【解决方案4】:

      由于没有 Java 类可以直接扩展两个或更多类,您可以肯定地说 Java 不支持多重继承。

      如果您可以说class A extends B, C,您将拥有多重继承,但您永远不能这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-16
        • 2020-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-11
        相关资源
        最近更新 更多