我理解语言规范只声明单继承,但我很困惑这个例子似乎打破了规则.
如果我写一Exception堂课,我会写:
public class MyException extends Exception {
//class body
}
Run Code Online (Sandbox Code Playgroud)
只有,如果你看这里,你会发现课程Exception延伸Throwable.
所以在我看来,我们有(理论代码示例)
public class MyException extends Throwable, Exception {
//class body
}
Run Code Online (Sandbox Code Playgroud)
为什么不是这样?
我想这是按照每个类扩展的方式完成的,Object但也可以一次子类化?
层次结构中可以有多个级别.类可以扩展一个本身扩展另一个类(或实现接口)的类.这与(在理论上或实践中)一个类本身扩展两个类不同.
Java中的接口确实提供了与其他语言中的多重继承相同的功能(因为类可以实现多个接口),但这不是您在这里看到的.这是具有多个祖先类的标准单继承.
它可能有助于描绘一个(生物学上很奇怪的)家谱,其中每个孩子只有一个父母.那些孩子也可能有祖父母,但在结构的任何层面上都不得超过一个节点.
你想象的结构看起来像这样:
A B
\ /
C
Run Code Online (Sandbox Code Playgroud)
但它实际上是这样的:
A
|
B
|
C
Run Code Online (Sandbox Code Playgroud)
最明显的区别是,更改A不会影响B第一个图形中的实例,但会影响B第二个图形中的实例.