Java Can';t重写父类的方法
我在尝试重写父类的方法时遇到编译错误:Java Can';t重写父类的方法,java,overriding,ioexception,Java,Overriding,Ioexception,我在尝试重写父类的方法时遇到编译错误: public class Reader { public void readToDbFromFile(String fileName, String table) throws FileNotFoundException() { .... } } public class ReaderWithBackup extends Reader { @Override public void readToDbFro
public class Reader {
public void readToDbFromFile(String fileName, String table) throws FileNotFoundException() {
....
}
}
public class ReaderWithBackup extends Reader {
@Override
public void readToDbFromFile(String fileName, String table) throws IOException {
super.readToDbFromFile();
doBackup(fileName, table);
}
...
}
它说“重写的方法不会抛出IOException”。这是什么意思?我怎样才能修好它
提前感谢。被重写的方法抛出
FileNotFoundException
,因此重写方法必须抛出FileNotFoundException
或FileNotFoundException
的子类IOException
是FileNotFoundException
的一个超类,因此重写方法无法抛出它
考虑以下代码:
try {
Reader reader = ...
reader.readToDbFromFile(..);
}
catch (FileNotFoundException ex) {
..
}
这是有效的代码,因为
readToDbFromFile
方法的Reader
只能抛出FileNotFoundException
已检查的异常。如果重写readToDbFromFile
是Reader
的某个子类,则如果将子类的实例分配给Reader
变量,则此代码必须仍然有效。因此,您的重写方法无法引发原始方法的throws子句未涵盖的异常。您无法在子类的重写方法中引发超类方法的父异常
由于FileNotFoundException
是IOException
的子类,因此不能在子类中抛出IOException
因此,您可以通过交换IOException
和FileNotFoundException
:-
public class Reader {
public void readToDbFromFile(String fileName, String table) throws IOException () {
....
}
}
public class ReaderWithBackup extends Reader {
@Override
public void readToDbFromFile(String fileName, String table) throws FileNotFoundException{
super.readToDbFromFile();
doBackup(fileName, table);
}
...
}
在您的Parent类中
readToDbFromFile
throwFileNotFoundException
。您应该在覆盖函数中抛出FileNotFoundException
notIOException
。比较这两种方法。。。两者都会抛出不同的异常IOException是FileNotFoundException的父级,对吗?如果父方法抛出FileNotFoundException,为什么子类不能对其进行泛化?@JohnBrownstone如果子类决定抛出一个SocketException
,该怎么办。这是IOException
的一个子类。但是,父方法只声明它抛出FileNotFoundException
,因此子方法不应该能够抛出SocketException
。