Наследование, подпись метода, переопределение метода и предложение исключения

Мой Родительский класс:

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, не так ли?

16
задан NINCOMPOOP 1 August 2013 в 07:52
поделиться