gpt4 book ai didi

java - 删除覆盖方法中的抛出,编译器在调用时需要一个 try/catch block

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

我有一个子类,我正在覆盖继承的父方法:我正在从方法声明中删除 throws 子句。

现在,使用多态性,我的实例的运行时类型应该决定方法的实现;然而,当我尝试编译时,编译器提示并希望在方法调用周围有一个 try/catch block ,就好像正在调用父类(super class)方法而不是子类版本?

我知道我可以删除 throws 声明或缩小可在重写时抛出的已检查异常的范围。为什么这仍然抛出异常?

class A{
void foo()throws Exception{throw new Exception();}
}

class SubB extends A{
@Override
void foo(){ System.out.println("B");
}

public static void main(String[] args) {
A a = new SubB();
a.foo(); //compiler reports: unhandled exception type Exception
}

最佳答案

编译器会生成 A确实会 抛出异常。但是,如果您告诉编译器它是一个实际的 SubB 对象,它将停止提示

SubB b = new SubB();
b.foo();

关于java - 删除覆盖方法中的抛出,编译器在调用时需要一个 try/catch block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9413599/

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