由于未处理的异常,以下代码无法编译,但在我看来应该没有问题:
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 视为仍然抛出检查异常?覆盖方法没有!