gpt4 book ai didi

java - 在 RunTimeException 的情况下如何在子类中声明父异常?

转载 作者:行者123 更新时间:2023-11-30 08:13:12 25 4
gpt4 key购买 nike

我指的是Why can't overriding methods throw exceptions broader than the overriden method?

但是在发生UncheckedExceptionRunTimeException的情况下如何在子类中声明父异常-

import java.io.*;

class Parent {
void msg() throws NullPointerException {
System.out.println("parent");
}
}

class Child extends Parent {
public static void main(String args[]) {
Parent p = new Child();
try {
p.msg();
} catch (NullPointerException e) {
System.out.println(e);
}
}

void msg() throws RuntimeException {
System.out.println("child");
}
}

是因为编译器不负责处理未经检查的异常吗?

这里还有一点,我正在使用子异常(NullPointerException)来处理它,并且这没有向我显示任何编译失败。

最佳答案

限制子类抛出的检查异常的目的是让调用者可以确定子类不会抛出除了父类(super class)可以抛出的内容之外的任何内容(使调用者能够像对待父类(super class)一样对待子类,请参阅LSP)。如果没有未经检查的异常,这种确定性是不可能的。

如果我声明一个方法来抛出 IllegalArgumentException,显然这并不能阻止它抛出 NullPointerException。对于编译器警告用户子类中重写方法以引发更广泛的未经检查的异常的情况没有任何好处;由于无论是否声明任何未经检查的异常都可能被抛出,因此用户对警告的确定性并不比没有警告的确定性高。因此,编译器会忽略方法声明的 throws 子句中出现的任何未经检查的异常。

关于java - 在 RunTimeException 的情况下如何在子类中声明父异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30055229/

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