相关疑难解决方法(0)

为什么不能覆盖方法抛出比重写方法更广泛的异常?

我正在阅读Kathe sierra的SCJP 6书,并且遇到了在重写方法中抛出异常的解释.我完全没有得到它.任何人都可以向我解释一下吗?

重写方法不得抛出新的或更广泛的已检查异常,而不是重写方法声明的异常.例如,声明FileNotFoundException的方法不能被声明SQLException,Exception或任何其他非运行时异常的方法覆盖,除非它是FileNotFoundException的子类.

java

95
推荐指数
5
解决办法
10万
查看次数

为什么会编译?覆盖方法不是异常的子类

我很难理解为什么以下代码不是异常的子类,但为什么会编译:

class Test 
{
    public void run() throws IOException 
    {
        System.out.println("Test");
    }
}

class SubTest extends Test 
{
    //not a subclass of IOException, still compiles 
    public void run() throws RuntimeException 
    {
        System.out.println("Test from sub");
    }
}

class Sub2Test extends Test 
{
    //not a subclass of IOException, does not compile
    public void run() throws Exception  
    {
        System.out.println("Test from sub");
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道这RuntimeException是一个未经检查的异常,但是我认为规则是它必须是父异常的子类?

java exception

4
推荐指数
1
解决办法
142
查看次数

标签 统计

java ×2

exception ×1