当我创建一个新类时,它是
ClassA extends Object{
}
所以,如果我要从ClassB继承ClassA,那就不是
ClassA extends Object extends ClassB {
}
基本上是Java中不允许的多重继承。
或者Object类是否有一个特殊的例外,这意味着确实可以安全地说, Java中的每个基类都是从2个类继承?
答案 0 :(得分:8)
没有
ClassA继承自ClassB继承自Class。
这不是多重继承。这是单继承。单继承为您提供了一种链:
Object -> ClassB -> ClassA
多重继承可以让你做更多的树:
Object -> ClassB \
---> ClassA
Object -> ClassC /
Java不允许你做后者。最接近的是实现多个接口。
请注意,这仍然可以(单继承),因为每个类最多只有一个直接基数:
/--> 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
答案 1 :(得分:1)
Java不支持多重继承。相反,你所描述的是一个阶级层次。 Java中没有显式扩展类的所有类都扩展为Object
。但是,如果课程A
扩展B
,则不会直接扩展Object
。由于B
直接延伸Object
,A
仍然是Object
的子类(如您可以Object a = new A()
没有任何问题),但它不是直接子类。