gpt4 book ai didi

java - 为什么这被认为是未处理的异常?

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

由于未处理的异常,以下代码无法编译,尽管在我看来应该没有问题:

class Car {
public void drive() throws Exception {
System.out.println("Driving...");
}
}

public class Sedan extends Car {
public void drive() {
System.out.println("Driving Sedan...");
}
public static void main(String[] args) {
Car c = new Sedan();
c.drive(); //unhandled exception!
}
}

对于编译器来说,当调用重写方法 c.drive() 时,不会抛出已检查的异常,这不是很明显吗?为什么仅仅因为引用是 Car 类型而不是 Sedan 类型,我们就必须将drive 视为仍然抛出检查异常?重写方法没有!

最佳答案

不幸的是,不,这对编译器来说并不明显。

编译器本质上是查看Car c 和对drive 的调用。编译器不知道 c 所指向的对象的运行时类型。因此,它会评估 Car.drive() 的方法签名,其中包括 throws Exception

为了更清楚地说明,如果在其他方法中将 c 重新分配给某个仍然抛出此异常的 SUV 对象,该怎么办?在调用 drive 方法时,编译器无法知道对象的状态。

关于java - 为什么这被认为是未处理的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39102443/

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