当我创建一个新的类,它是Java中的每个子类都从两个类(Object及其超类)继承?
ClassA extends Object{
}
所以,如果我有从的ClassA ClassB的继承,那岂不是
ClassA extends Object extends ClassB {
}
这基本上是多重继承,是不是允许在Java中。
或者对于Object类有一个特殊的例外,这意味着它确实可以安全地说,Java中的每个基类继承了两个类?
当我创建一个新的类,它是Java中的每个子类都从两个类(Object及其超类)继承?
ClassA extends Object{
}
所以,如果我有从的ClassA ClassB的继承,那岂不是
ClassA extends Object extends ClassB {
}
这基本上是多重继承,是不是允许在Java中。
或者对于Object类有一个特殊的例外,这意味着它确实可以安全地说,Java中的每个基类继承了两个类?
第
这将是ClassA继承自继承自Object的ClassB。
这不是多重继承。这是单一继承。单继承给你的排序链的:
Object -> ClassB -> ClassA
多重继承让你做更多的树:
Object -> ClassB \
---> ClassA
Object -> ClassC/
Java并不让你做后者。你可以得到最接近的是实现多个接口。
注意,这仍然是OK(单继承),因为每类最多有一个直接基:
/--> ClassC
Object -> ClassB -
\--> ClassD
另外,回答你直接的问题,JLS 8.1.4 states(重点煤矿):
给定一个...类声明...类类型C ...的直接超类是如果存在extends子句,则在C的声明的extends子句中给出的类型,否则为Object。
也就是说,它仍然是单一继承。如果你有一个extends
那么这就是基类,否则基数是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不支持多重继承。相反,你所描述的是一个阶级阶层。 Java中没有明确扩展类的所有类扩展为Object
。但是,如果类A
延伸B
,那么它不直接延伸Object
。因为B
直接延伸Object
,A
仍然是子类Object
(因为在你可以做Object a = new A()
没有任何问题),但它不是一个直接的子类。
@Andreas我并不打算至。我会编辑我的答案。谢谢。 –
多继承有两个直接的超类。相反,这是一个类层次结构,其中'B'扩展'A',继而扩展'Object'。 –
Object的唯一特殊例外是:“extends子句不能出现在类Object的定义中,或者发生编译时错误,因为它是原始类,并且没有直接的超类。” (来自[JLS Sec 8.1.4](https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.1.4)) –