gpt4 book ai didi

继承中的java异常处理

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:57:04 31 4
gpt4 key购买 nike

看看下面的程序..

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() 方法

现在,如果我用 IOException 替换父类中的 RemoteException,反之亦然。然后就是编译了。

任何其他已检查的异常组合在这里都不起作用,即使我使用的是同一级别的已检查异常也是如此。

现在我很困惑为什么覆盖只发生在一种情况下,而不发生在其他情况下???非常感谢您的回答。

最佳答案

Inheritance 中的

Exceptions 规则如下:

“当子类覆盖父类(super class)中的方法时,子类方法定义可以仅在throws中指定所有或部分异常类parent 类方法(或覆盖方法)的子句”。

RemoteException继承了IOException,所以RemoteException是一个子类,IOEXception是一个父类(super class)。这意味着重写父类(class1)方法的子类(class2)方法抛出IOException,可以throw RemoteException但反之则不行.

关于继承中的java异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3520831/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com