Следующий код не компилируется из-за необработанного исключения, хотя мне кажется, что там не должно быть никаких проблем:Почему это считается необработанным исключением?
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', который мог бы «бросить» «Исключение». Поскольку 'throw' определен в' Car', вам нужно обработать его. – SomeJavaGuy
Do 'Sedan c = new Sedan();' –