首先,抱歉我的英语不好。
问题:
如果我有一个子类扩展了一个抛出 CHECKED 异常的方法,那么为什么 Java 允许我在子类的重写方法中抛出 RuntimeException,如下例所示:
public class A {
public void doSomething() throws FileNotFoundException {
System.out.println("doing something...");
}
}
进而...
public class B extends A {
public void doSomething() throws RuntimeException { // <- my question
System.out.println("doing something here too...");
}
}
任何方法都可以抛出RuntimeException
or Error
- 未经检查的异常基类。所以throws RuntimeException
与其他任何事情都无关。
您可以使用更窄的 throws 子句重写方法。这throws FileNotFoundException
并不意味着该方法必须抛出异常。基类中的方法可能会抛出它;派生方法中的方法在这种情况下则不然。
您不能扩大 throws 子句,因为引用基类的客户端代码不会期望它。
这类似于协变返回类型您可以在其中缩小派生类/接口中方法的返回类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)