下面的代码不会因为未处理的异常的编译,但它似乎对我来说,应该没有问题:为什么这被认为是一个未处理的异常?
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'可以抛出'Exception'但'主要修复'不处理它。 – tkausl
,因为'c'可能不是'Sedan',它可以抛出一个'Exception'。由于'throw'在'Car'中定义,所以您需要处理它。 – SomeJavaGuy
做'Sedan c = new Sedan();' –