为什么被重写的方法不能抛出新的已检查异常

Pra*_*mar 4 java

我有两个问题:

  1. 重写方法不能抛出新的已检查异常的约束的目的是什么?
  2. 为什么允许被重写的方法只能抛出所有或者没有,或者在超类中重写方法的throws子句中指定的已检查异常的子集?

T.J*_*der 8

在这两种情况下,都是因为你覆盖的基本方法已经设置了与调用代码的契约; 如果你可以添加方法可能抛出的已检查异常,那么你将违反合同.

考虑一个Base带有foo抛出已检查异常的方法的类SomeException.你也有一个Derived派生Base和覆盖的东西foo.Code in App正在使用Base b变量,但使用新的实例Derived和调用来初始化它b.foo().合同只是foo投掷SomeException; 抛出任何其他东西打破了合同.