次のコードは、未処理の例外が原因でコンパイルされませんが、問題はないように思われます。
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()
オーバーライドするメソッドが呼び出されたときに、チェック済み例外がスローされないことは、コンパイラにとって明らかであるべきではありませんか? 参照が Sedan 型ではなく Car 型であるという理由だけで、チェック済み例外をスローするかのように drive を扱わなければならないのはなぜでしょうか? オーバーライド メソッドはそうではありません。