Java中方法重写的异常处理

如果我们谈论带有异常处理的方法重写, 则有很多规则。规则如下:如果超类方法未声明异常如果超类方法未声明异常, 则子类重写方法无法声明已检查的异常, 但可以声明未检查的异常。如果超类方法声明异常如果超类方法声明异常, 则子类重写方法可以声明相同, 子类异常或不声明异常, 但不能声明父级异常。
如果超类方法未声明异常
1)规则:如果超类方法未声明异常, 则子类重写方法无法声明已检查的异常。
import java.io.*; class Parent{ void msg(){System.out.println("parent"); } }class TestExceptionChild extends Parent{ void msg()throws IOException{ System.out.println("TestExceptionChild"); } public static void main(String args[]){ Parent p=new TestExceptionChild(); p.msg(); } }

立即测试
Output:Compile Time Error

2)规则:如果超类方法未声明异常, 则子类重写方法无法声明已检查的异常, 但可以声明未检查的异常。
import java.io.*; class Parent{ void msg(){System.out.println("parent"); } }class TestExceptionChild1 extends Parent{ void msg()throws ArithmeticException{ System.out.println("child"); } public static void main(String args[]){ Parent p=new TestExceptionChild1(); p.msg(); } }

立即测试
Output:child

如果超类方法声明异常
1)规则:如果超类方法声明异常, 则子类重写方法可以声明相同, 子类异常或无异常, 但不能声明父异常。子类重写方法声明父异常的示例
import java.io.*; class Parent{ void msg()throws ArithmeticException{System.out.println("parent"); } }class TestExceptionChild2 extends Parent{ void msg()throws Exception{System.out.println("child"); }public static void main(String args[]){ Parent p=new TestExceptionChild2(); try{ p.msg(); }catch(Exception e){} } }

立即测试
Output:Compile Time Error

子类重写方法声明相同异常的示例
import java.io.*; class Parent{ void msg()throws Exception{System.out.println("parent"); } }class TestExceptionChild3 extends Parent{ void msg()throws Exception{System.out.println("child"); }public static void main(String args[]){ Parent p=new TestExceptionChild3(); try{ p.msg(); }catch(Exception e){} } }

立即测试
Output:child

子类重写方法声明子类异常的示例
import java.io.*; class Parent{ void msg()throws Exception{System.out.println("parent"); } }class TestExceptionChild4 extends Parent{ void msg()throws ArithmeticException{System.out.println("child"); }public static void main(String args[]){ Parent p=new TestExceptionChild4(); try{ p.msg(); }catch(Exception e){} } }

立即测试
Output:child

子类重写方法未声明异常的示例
import java.io.*; class Parent{ void msg()throws Exception{System.out.println("parent"); } }class TestExceptionChild5 extends Parent{ void msg(){System.out.println("child"); }public static void main(String args[]){ Parent p=new TestExceptionChild5(); try{ p.msg(); }catch(Exception e){} } }

【Java中方法重写的异常处理】立即测试
Output:child

    推荐阅读