Java单一继承和异常/可抛出类

avg*_*tvs 1 java inheritance

我理解语言规范只声明单继承,但我很困惑这个例子似乎打破了规则.

如果我写一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但也可以一次子类化?

Way*_*ett 5

层次结构中可以有多个级别.类可以扩展一个本身扩展另一个类(或实现接口)的类.这与(在理论上或实践中)一个类本身扩展两个类不同.

Java中的接口确实提供了与其他语言中的多重继承相同的功能(因为类可以实现多个接口),但这不是您在这里看到的.这是具有多个祖先类的标准单继承.

它可能有助于描绘一个(生物学上很奇怪的)家谱,其中每个孩子只有一个父母.那些孩子也可能有祖父母,但在结构的任何层面上都不得超过一个节点.

你想象的结构看起来像这样:

A   B
 \ /
  C
Run Code Online (Sandbox Code Playgroud)

但它实际上是这样的:

A
|
B
|
C
Run Code Online (Sandbox Code Playgroud)

最明显的区别是,更改A不会影响B第一个图形中的实例,但会影响B第二个图形中的实例.