在 RunTimeException 的情况下如何在子 class 中声明父异常?
How it can be possible in case of RunTimeException to declare a parent exception in child class?
我指的是Why can't overriding methods throw exceptions broader than the overriden method?
但是在 UncheckedException
或 RunTimeException
的情况下如何在子 class-
中声明父异常
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");
}
}
是不是因为编译器不负责处理unchecked Exception
这里还有一点,我正在处理子异常 (NullPointerException
),这没有显示任何编译失败。
限制子类抛出的已检查异常的要点是,调用者可以确定子类不会抛出超类抛出的异常(使调用者能够像对待超类一样对待子类, 请参阅 LSP)。对于未经检查的异常,这种确定性是不可能的。
如果我声明一个抛出 IllegalArgumentException 的方法,显然这并不能阻止它抛出 NullPointerException。编译器警告用户子类中的方法被重写以抛出范围更广的未检查异常的情况没有任何好处;由于任何未经检查的异常都可能被抛出,而不管它是否被声明,所以用户对警告的确定性并不比没有警告的确定性高。因此,编译器会忽略出现在方法声明的 throws 子句中的任何未经检查的异常。
我指的是Why can't overriding methods throw exceptions broader than the overriden method?
但是在 UncheckedException
或 RunTimeException
的情况下如何在子 class-
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");
}
}
是不是因为编译器不负责处理unchecked Exception
这里还有一点,我正在处理子异常 (NullPointerException
),这没有显示任何编译失败。
限制子类抛出的已检查异常的要点是,调用者可以确定子类不会抛出超类抛出的异常(使调用者能够像对待超类一样对待子类, 请参阅 LSP)。对于未经检查的异常,这种确定性是不可能的。
如果我声明一个抛出 IllegalArgumentException 的方法,显然这并不能阻止它抛出 NullPointerException。编译器警告用户子类中的方法被重写以抛出范围更广的未检查异常的情况没有任何好处;由于任何未经检查的异常都可能被抛出,而不管它是否被声明,所以用户对警告的确定性并不比没有警告的确定性高。因此,编译器会忽略出现在方法声明的 throws 子句中的任何未经检查的异常。