Java 例外覆盖规则
Java重写规则说被重写的方法不能抛出父异常,但这个示例运行良好。有人能解释一下吗Java 例外覆盖规则,java,overriding,Java,Overriding,Java重写规则说被重写的方法不能抛出父异常,但这个示例运行良好。有人能解释一下吗 public class TestA { public void display() throws ArithmeticException{ System.out.println("inside parent"); } } public class Test extends TestA{ public void display() throws RuntimeExce
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");
}
}
在重写方法中,始终允许您声明它抛出
RuntimeException
,因为RuntimeException
是未检查的异常。通常不会声明方法抛出RuntimeException
s,但如果愿意,可以这样做
国家:
允许但不要求在条款中提及未经检查的异常类(§11.1.1)
此外,缔约国:
对于m2的throws子句中列出的每个选中的异常类型,在m1的throws子句的擦除(§4.6)中必须出现相同的异常类或其超类型之一;否则,将发生编译时错误
但是
RuntimeException
是未选中的,因此它不需要出现在超类方法的throws
子句中。在重写方法中,始终允许声明它抛出RuntimeException
,因为RuntimeException
是未选中的异常。通常不会声明方法抛出RuntimeException
s,但如果愿意,可以这样做
国家:
允许但不要求在条款中提及未经检查的异常类(§11.1.1)
此外,缔约国:
对于m2的throws子句中列出的每个选中的异常类型,在m1的throws子句的擦除(§4.6)中必须出现相同的异常类或其超类型之一;否则,将发生编译时错误
但是
RuntimeException
是未选中的,因此它不需要出现在超类方法的throws
子句中。在重写方法中,始终允许声明它抛出RuntimeException
,因为RuntimeException
是未选中的异常。通常不会声明方法抛出RuntimeException
s,但如果愿意,可以这样做
国家:
允许但不要求在条款中提及未经检查的异常类(§11.1.1)
此外,缔约国:
对于m2的throws子句中列出的每个选中的异常类型,在m1的throws子句的擦除(§4.6)中必须出现相同的异常类或其超类型之一;否则,将发生编译时错误
但是
RuntimeException
是未选中的,因此它不需要出现在超类方法的throws
子句中。在重写方法中,始终允许声明它抛出RuntimeException
,因为RuntimeException
是未选中的异常。通常不会声明方法抛出RuntimeException
s,但如果愿意,可以这样做
国家:
允许但不要求在条款中提及未经检查的异常类(§11.1.1)
此外,缔约国:
对于m2的throws子句中列出的每个选中的异常类型,在m1的throws子句的擦除(§4.6)中必须出现相同的异常类或其超类型之一;否则,将发生编译时错误
但是
RuntimeException
是未选中的,因此它不需要在超类方法的throws
子句中。RuntimeException
是未选中的异常,可以从任何方法中抛出。与检查的异常不同,方法重写的规则在此不适用。RuntimeException是未检查的异常,可以从任何方法中抛出。与检查的异常不同,方法重写的规则在此不适用。RuntimeException是未检查的异常,可以从任何方法中抛出。与检查的异常不同,方法重写的规则在此不适用。RuntimeException是未检查的异常,可以从任何方法中抛出。与选中的异常不同,方法重写的规则在此不适用。RuntimeException
未选中,它根本不需要声明。RuntimeException
未选中,它根本不需要声明。RuntimeException
未选中,它根本不需要声明。RuntimeException
未选中,它根本不需要声明。