为了账号安全,请及时绑定邮箱和手机立即绑定

为什么重写方法不能抛出比重写方法更宽的异常?

为什么重写方法不能抛出比重写方法更宽的异常?

ibeautiful 2019-07-15 15:22:28
为什么重写方法不能抛出比重写方法更宽的异常?我正在阅读Kathe塞拉利昂的SCJP 6(SCJP 6)一书,并偶然发现了在重写的方法中抛出异常的解释。我完全不明白。有人能给我解释一下吗?重写方法不得抛出新的或比重写的方法声明的异常范围更广的检查异常。例如,声明FileNotFoundException的方法不能被声明SQLException、异常或任何其他非运行时异常的方法覆盖,除非它是FileNotFoundException的子类。
查看完整描述

3 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

重写方法可以抛出任何未经检查的(运行时)异常,而不管重写的方法是否声明异常。

例子:

class Super {
    public void test() {
        System.out.println("Super.test()");
    }}class Sub extends Super {
    @Override
    public void test() throws IndexOutOfBoundsException {
        // Method can throw any Unchecked Exception
        System.out.println("Sub.test()");
    }}class Sub2 extends Sub {
    @Override
    public void test() throws ArrayIndexOutOfBoundsException {
        // Any Unchecked Exception
        System.out.println("Sub2.test()");
    }}class Sub3 extends Sub2 {
    @Override
    public void test() {
        // Any Unchecked Exception or no exception
        System.out.println("Sub3.test()");
    }}class Sub4 extends Sub2 {
    @Override
    public void test() throws AssertionError {
        // Unchecked Exception IS-A RuntimeException or IS-A Error
        System.out.println("Sub4.test()");
    }}


查看完整回答
反对 回复 2019-07-15
  • 3 回答
  • 0 关注
  • 813 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信