Java 中的每个子类都继承自两个 类(对象及其超类)?

Every subclass in Java inherits from two classes (Object and its superclass)?

当我创建一个新的class时,它是

ClassA extends Object{
}

那么,如果让ClassA继承自ClassB,岂不是

ClassA extends Object extends ClassB {
}

这基本上是 Java 中不允许的多重继承。

或者对象 class 是否有一个特殊的例外,这意味着确实可以安全地说 Java 中的每个基 class 继承来自恰好 2 classes ?

没有

应该是ClassA继承自ClassB,ClassB继承自Object。

这不是多重继承。这是单一继承。单一继承给你一种链条:

Object -> ClassB -> ClassA

多重继承让你做更多的树:

Object -> ClassB \
                  ---> ClassA
Object -> ClassC /

Java 不允许你做后者。最接近的是实现多个接口。

请注意,这仍然可以(单继承),因为每个 class 最多有一个直接基数:

                  /--> ClassC
Object -> ClassB -
                  \--> ClassD

此外,为了回答您的直接问题,JLS 8.1.4 states(强调我的):

Given a ... class declaration ... the direct superclass of the class type C ... is the type given in the extends clause of the declaration of C if an extends clause is present, or Object otherwise.

也就是说,还是单继承。如果你有一个 extends 那么它就是基数 class,否则基数就是 Object。在您的示例中,ClassA 没有 Object 作为直接基础


您也可以自己尝试一下。 Check out this example:

static class ClassB {
}

static class ClassA extends ClassB {
}

static void printHierarchy (Class<?> clz) {
    if (clz != null) {
        System.out.println(clz.getSimpleName());
        System.out.print("inherits from: ");
        printHierarchy(clz.getSuperclass());
    } else {
        System.out.println("nothing");
    }
}

public static void main (String[] args) {
    printHierarchy(ClassA.class);
}

输出:

ClassA
inherits from: ClassB
inherits from: Object
inherits from: nothing

Java 不支持多重继承。相反,您所描述的是 class 层次结构。 Java 中所有未显式扩展 class 的 classes,扩展 Object。但是,如果 class A 扩展 B,则它不是直接扩展 Object。因为 B 直接扩展了 Object,所以 A 仍然是 Object 的 child class(因为你可以不 Object a = new A()任何问题),但它不是直接子 class。