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。
当我创建一个新的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。