當您嘗試處理由特定方法拋出的(已檢查的)異常時,您需要使用Exception類別或發生異常的超類別來捕獲它。
同樣,在重寫超類別的方法時,如果它拋出異常−
#子類別中的方法應該拋出相同的異常或其子類型。
子類別中的方法不應該拋出其超類型。
您可以在不拋出任何例外的情況下進行重寫。
當您有三個名為Demo,SuperTest和Super的類別(層次結構)繼承時,如果Demo和SuperTest有一個名為sample()的方法。
即時示範
class Demo { public void sample() throws ArrayIndexOutOfBoundsException { System.out.println("sample() method of the Demo class"); } } class SuperTest extends Demo { public void sample() throws IndexOutOfBoundsException { System.out.println("sample() method of the SuperTest class"); } } public class Test extends SuperTest { public static void main(String args[]) { Demo obj = new SuperTest(); try { obj.sample(); }catch (ArrayIndexOutOfBoundsException ex) { System.out.println("Exception"); } } }
sample() method of the SuperTest class
如果你捕捉異常的類別與拋出的異常不相同或不是異常的超類,你將會得到一個編譯時錯誤。
同樣地,在重寫方法時,拋出的異常應該與被重寫方法拋出的異常相同或是其超類,否則會發生編譯時錯誤。
示範
import java.io.IOException; import java.io.EOFException; class Demo { public void sample() throws IOException { System.out.println("sample() method of the Demo class"); } } class SuperTest extends Demo { public void sample() throws EOFException { System.out.println("sample() method of the SuperTest class"); } } public class Test extends SuperTest { public static void main(String args[]) { Demo obj = new SuperTest(); try { obj.sample(); }catch (EOFException ex){ System.out.println("Exception"); } } }
Test.java:12: error: sample() in SuperTest cannot override sample() in Demo public void sample() throws IOException { ^ overridden method does not throw IOException 1 error D:\>javac Test.java Test.java:20: error: unreported exception IOException; must be caught or declared to be thrown obj.sample(); ^ 1 error
以上是在Java中覆蓋時,父子層次結構對於拋出異常重要嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!