Мой Parent
класс:
import java.io.IOException;
public class Parent {
int x = 0;
public int getX() throws IOException{
if(x<=0){
throw new IOException();
}
return x;
}
}
I extend
этот класс для записи подкласса Child
:
public class Child1 extends Parent{
public int getX(){
return x+10;
}
}
Обратите внимание, что при переопределении метода getX в классе Child
я удалил предложение throws
из определения метода. Теперь это приводит к аномальному поведению ожидаемого компилятора:
new Parent().getX() ;
не компилируется без его включения в блок try-catch
, как и ожидалось.
new Child().getX() ;
компилируется без его включения в блок try-catch
.
Но нижним строкам кода нужен блок try-catch.
Parent p = new Child();
p.getX();
Как это можно было бы предусмотреть, например, используя ссылку родительского класса для вызова дочернего метода во время полиморфизма во время выполнения, почему разработчики Java не сделали обязательным включение предложения throws в определение метода, переопределяя определенный родительский элемент метод класса? Я имею в виду, если метод родительского класса имеет предложение throws в своем определении, то, переопределяя его, переопределяющий метод также должен включать предложение throws, не так ли?