覆盖方法能否抛出 Java 中被覆盖方法抛出的异常的超类型?


如果超类方法抛出某个异常,则子类方法不应抛出其超类型。

示例

在下面的示例中,超类的 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

更新日期:15 年 10 月 2019 日

238 次浏览

开始你的 职业生涯

完成课程并获得认证

开始吧
广告