gpt4 book ai didi

Java认证: How to override methods that define a throws exception?

转载 作者:行者123 更新时间:2023-12-02 06:03:23 27 4
gpt4 key购买 nike

任何人都可以确认以下关于定义方法重写时抛出的异常的方法吗?我想确保我清楚地理解它。

给出以下代码:

class A
{
public void doStuff() throws IllegalArgumentException{}
}

class B extends A
{
public void doStuff() throws NumberFormatException{}
}

class C extends A
{
public void doStuff() throws Exception{}
}

只有类 A 和 B 应该编译,而不是类 C。当重写一​​个方法时,你可以缩小抛出的类,但不能像在类 C 中那样扩大它。我相信这背后的原因是以下代码中的示例:

class D
{
doIt(A a)
{
try
{
a.doStuff();
}
catch(IlligalArgumentException e){}
}
}

A 类可以扩展任意多次,因此 doStuff() 方法也可以被重写任意多次,但无论如何,上面的 try catch 总是会捕获异常。

但是如果允许扩展,上面的代码可能会错过抛出的异常,并且应用程序中会出现意外的结果。

这是正确的想法吗?我还有什么遗漏的吗?

谢谢

最佳答案

如果一个方法声明抛出一个给定的异常,则子类中的重写方法只能声明抛出该异常或其子类。这是因为多态性。所以在我看来,你的想法是正确的。

关于Java认证: How to override methods that define a throws exception?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22481939/

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