我正在阅读Kathe sierra的SCJP 6书,并且遇到了在重写方法中抛出异常的解释.我完全没有得到它.任何人都可以向我解释一下吗?
重写方法不得抛出新的或更广泛的已检查异常,而不是重写方法声明的异常.例如,声明FileNotFoundException的方法不能被声明SQLException,Exception或任何其他非运行时异常的方法覆盖,除非它是FileNotFoundException的子类.
我很难理解为什么以下代码不是异常的子类,但为什么会编译:
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是一个未经检查的异常,但是我认为规则是它必须是父异常的子类?