Java重写规则表示重写的方法不能抛出父异常,但此示例运行正常。任何人都可以对此有所了解吗?
public class TestA {
public void display() throws ArithmeticException{
System.out.println("inside parent");
}
}
public class Test extends TestA{
public void display() throws RuntimeException{
System.out.println("inside child");
}
}
答案 0 :(得分:3)
在重写方法中,您始终可以声明它会抛出RuntimeException
,因为RuntimeException
是未经检查的异常。通常不会声明方法抛出RuntimeException
,但如果您愿意,也可以这样做。
允许但不要求在throws子句中提及未经检查的异常类(第11.1.1节)。
此外,Section 8.4.8.3 of the JLS声明:
对于m2的throws子句中列出的每个已检查异常类型,m1的throws子句的擦除(第4.6节)中必须出现相同的异常类或其超类型之一;否则,发生编译时错误。
但RuntimeException
未经检查,因此不需要在超类方法的throws
子句中。
答案 1 :(得分:0)
RuntimeException
是未经检查的异常,可以从任何方法抛出。与已检查的方法覆盖的异常规则不同,此处不适用。