Java 異常 重寫方法時拋出異常
阿新 • • 發佈:2017-10-31
targe 錯誤 註意 exceptio nbsp 包含 ava 子類重寫 cep
註意:
子類重寫父類方法時要拋出與父類一致的異常,或者不拋出異常。
子類重寫父類方法所拋出的異常不能超出父類的範疇。
重寫方法不能拋出新的受檢異常或者比被重寫方法更加寬泛的受檢異常,可以拋出非受檢異常(父類只拋出受檢異常情況下)。例如:父類的一個方法拋出了一個受檢異常IOException,重寫該方法時不能拋出Exception,只能拋出IOException的子類異常,也可以拋出非受檢異常。Error和RuntimeException及其子類屬於非受檢異常(unchecked),其它異常屬於受檢異常(checked)。
1 class A {
2 public void fun() throws Exception {
3
4 }
5 }
6 class B extends A {
7 public void fun() throws IOException, RuntimeException {
8
9 }
10 }
父類拋出的異常包含所有異常,上面的寫法正確。
1 class A {
2 public void fun() throws RuntimeException {
3
4 }
5 }
6 class B extends A {
7 public void fun() throws IOException, RuntimeException {
8
9 }
10 }
子類IOException超出了父類的異常範疇,上面的寫法錯誤。
1 class A {
2 public void fun() throws IOException {
3
4 }
5 }
6 class B extends A {
7 public void fun() throws IOException, RuntimeException, ArithmeticException {
8
9 }
10 }
RuntimeException不屬於IO的範疇,超出了父類的異常範疇。RuntimeException和ArithmeticException屬於運行時異常,子類重寫的方法可以拋出任何運行時異常。所以上面的寫法正確。
參考資料
在繼承中重寫方法時拋出異常的問題
Java 異常 重寫方法時拋出異常