首頁  >  文章  >  Java  >  在Java中,關於方法覆蓋,異常處理的規則是什麼?

在Java中,關於方法覆蓋,異常處理的規則是什麼?

WBOY
WBOY轉載
2023-09-06 18:29:13679瀏覽

在Java中,關於方法覆蓋,異常處理的規則是什麼?

當覆寫超類別方法時,如果該方法拋出異常,您需要遵循一定的規則。

應該拋出相同的異常或子類型

如果超類別方法拋出某個異常,子類別中的方法應該拋出相同的異常或它的子類型。

範例

在下面的範例中,超類別的readFile()方法拋出了IOException異常,而子類別的readFile()方法拋出了FileNotFoundException異常。

由於FileNotFoundException異常是IOException的子類型,所以程式可以在沒有任何錯誤的情況下編譯和執行。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
abstract class Super {
   public String readFile(String path) throws IOException {
      throw new IOException();
   }
}
public class ExceptionsExample extends Super {
   @Override
   public String readFile(String path) throws FileNotFoundException {
      Scanner sc = new Scanner(new File("E://test//sample.txt"));
      String input;
      StringBuffer sb = new StringBuffer();
      while (sc.hasNextLine()) {
         input = sc.nextLine();
         sb.append(" "+input);
      }
      return sb.toString();
   }
   public static void main(String args[]) {
      String path = "E://test//sample.txt";
      ExceptionsExample obj = new ExceptionsExample();
      try {
         System.out.println(obj.readFile(path));
      }catch(FileNotFoundException e) {
         System.out.println("Make sure the specified file exists");
      }
   }
}

輸出

Tutorials Point is an E-learning company that set out on its journey to provide knowledge to that class of readers that responds better to online content. With Tutorials Point, you can learn at your own pace, in your own space. After a successful journey of providing the best learning content at tutorialspoint.com, we created our subscription based premium product called Tutorix to provide Simply Easy Learning in the best personalized way for K-12 students, and aspirants of competitive exams like IIT/JEE and NEET.

範例

同樣,如果子類別拋出與超類別相同的異常,則程式將成功編譯並執行。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
abstract class Super {
   public void sampleMethod()throws FileNotFoundException {
      System.out.println("Method of superclass");
   }
}
public class ExceptionsExample extends Super {
   public void sampleMethod()throws FileNotFoundException {
      System.out.println("Method of Subclass");
   }
   public static void main(String args[]) {
      ExceptionsExample obj = new ExceptionsExample();
      obj.sampleMethod();
   }
}

輸出

Method of Subclass

不應該拋出超類別的異常

如果超類別方法拋出某個異常,子類別中的方法不應該拋出其超類。

範例

在下面的範例中,超類別的readFile()方法拋出FileNotFoundException異常,而子類別的readFile()方法拋出IOException異常,後者是FileNotFoundException的超類。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
abstract class Super {
   public String readFile(String path)throws FileNotFoundException {
      throw new FileNotFoundException();
   }
}
public class ExceptionsExample extends Super {
   @Override
   public String readFile(String path)throws IOException {
      //method body ......
   }
}

編譯時錯誤

編譯時,上面的程式給出以下輸出-

ExceptionsExample.java:13: error: readFile(String) in ExceptionsExample cannot override readFile(String) in Sup
   public String readFile(String path)throws IOException {
                 ^
   overridden method does not throw IOException
1 error

不拋出任何例外

如果父類別方法拋出出某些異常,你可以在重寫時不拋出任何異常。

範例

在下面的範例中,父類別的sampleMethod()方法會拋出FileNotFoundException異常,而子類別的sampleMethod()方法根本不會拋出任何例外。儘管如此,該程式可以編譯和執行而不會出現任何錯誤。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
abstract class Super {
   public void sampleMethod()throws FileNotFoundException {
      System.out.println("Method of superclass");
   }
}
public class ExceptionsExample extends Super {
   public void sampleMethod() {
      System.out.println("Method of Subclass");
   }
   public static void main(String args[]) {
      ExceptionsExample obj = new ExceptionsExample();
      obj.sampleMethod();
   }
}

輸出

Method of Subclass

以上是在Java中,關於方法覆蓋,異常處理的規則是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除