Мой Родительский
класс:
import java.io.IOException;
public class Parent {
int x = 0;
public int getX() throws IOException{
if(x<=0){
throw new IOException();
}
return x;
}
}
Я расширяю
этот класс, чтобы написать подкласс Дочерний
:
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, не так ли?