SCJP - метод переопределения с обработкой исключений вызывает ошибку компилятора

В книге SCJP Кэти Сьерра, выдержка выглядит следующим образом:

Если метод переопределен, но вы используете полиморфную ссылку (супертип) для ссылки на объект подтипа с помощью метода переопределения, компилятор предполагает, что вы вызываете версию метода супертипа. Если версия супертипа объявляет проверенное исключение, а переопределенный метод подтипа - нет, компилятор все еще думает, что вы вызываете метод, который объявляет исключение (подробнее в Главе 5).

Давайте посмотрим на пример:

class Animal {
    public void eat() throws Exception {
        // throws an Exception
    }
}
class Dog2 extends Animal {
    public void eat() { /* no Exceptions */ }
    public static void main(String[] args) {
        Animal a = new Dog2();
        Dog2 d = new Dog2();
        d.eat();   // ok
        a.eat();   // compiler error - 
                   // unreported exception
    }
}

Этот код не будет компилироваться из-за исключения, объявленного в методе Animal eat (). Это происходит, хотя во время выполнения используемый метод eat () будет версией Dog, которая не объявляет исключение.

Что я не понимаю, так это какa.eat(); вызывает ошибку компилятора? (переопределенная функция у ребенка может не иметь никакого исключения, даже если у Super есть)

Ответы на вопрос(2)

Ваш ответ на вопрос