看看下面的程序..
import java.io.*;
import java.rmi.*;
class class1
{
public void m1() throws RemoteException
{
System.out.println("m1 in class1");
}
}
class class2 extends class1
{
public void m1() throws IOException
{
System.out.println("m1 in class2");
}
}
class ExceptionTest2
{
public static void main(String args[])
{
class1 obj = new class1();
try{
obj.m1();
}
catch(RemoteException e){
System.out.println("ioexception");
}
}
}
编译时错误.....无法重写 m1() 方法
现在,如果我将父类中的 RemoteException 替换为 IOException ,反之亦然。然后就是编译了。
即使我使用同一级别的检查异常,任何其他检查异常组合在这里都不起作用。
现在我很困惑为什么覆盖仅在一种情况下发生,而不在其他情况下发生???
我将非常感谢您的回答。
当重写抛出异常的方法时,您只能抛出相同的异常或更具体的异常子类型。
RemoteException 是 IOException 的子类型。因此,当父方法抛出 IOException 时,您的子方法可以抛出 RemoteException。
你也可以从逻辑上思考一下。如果子方法抛出比父方法更广泛的异常,则该方法可能会抛出与父方法不匹配的异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)