覆盖方法能否抛出 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
广告