lea*_*boy 1 java oop inheritance multiple-inheritance
当我创建一个新类时,它就是
ClassA extends Object{
}
Run Code Online (Sandbox Code Playgroud)
所以,如果我要从ClassB继承ClassA,那就不是了
ClassA extends Object extends ClassB {
}
Run Code Online (Sandbox Code Playgroud)
这基本上是Java中不允许的多重继承.
或者对于Object类是否有一个特殊的例外,这意味着确实可以安全地说,Java中的每个基类都只从2个类继承?
没有.
它将继承自ClassB继承自Object的ClassA.
这不是多重继承.这是单继承.单继承为您提供一种链:
Object -> ClassB -> ClassA
Run Code Online (Sandbox Code Playgroud)
多重继承允许您执行更多树:
Object -> ClassB \
---> ClassA
Object -> ClassC /
Run Code Online (Sandbox Code Playgroud)
Java不允许你做后者.您可以获得的最接近的是实现多个接口.
请注意,这仍然可以(单继承),因为每个类最多只有一个直接基数:
/--> ClassC
Object -> ClassB -
\--> ClassD
Run Code Online (Sandbox Code Playgroud)
另外,为了回答您的直接问题,JLS 8.1.4声明(强调我的):
给定...类声明...类类型C的直接超类是C 的声明的extends子句中给出的类型,如果存在extends子句,否则为Object.
也就是说,它仍然是单一继承.如果你有一个extends
那么基类,否则基数是Object
.在您的示例中,ClassA
没有Object
作为直接基础.
你也可以尝试一下自己.看看这个例子:
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);
}
Run Code Online (Sandbox Code Playgroud)
输出:
ClassA
inherits from: ClassB
inherits from: Object
inherits from: nothing
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
485 次 |
最近记录: |