SCJP - substituir método com manipulação de exceção gera um erro do compilador

No livro SCJP de Kathey Sierra, um trecho é o seguinte:

Se um método for substituído, mas você usar uma referência polimórfica (supertipo) para se referir ao objeto subtipo com o método substituto, o compilador assume que você está chamando a versão supertipo do método. Se a versão do supertipo declara uma exceção verificada, mas o método do subtipo substituto não, o compilador ainda pensa que você está chamando um método que declara uma exceção (mais no Capítulo 5).

Vamos dar uma olhada em um exemplo:

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
    }
}

Este código não será compilado devido à exceção declarada no método Animal eat (). Isso acontece mesmo que, em tempo de execução, o método eat () usado seja a versão Dog, que não declara a exceção.

Agora o que eu não entendo é que comoa.eat(); gera um erro do compilador? (a função substituída no filho pode não ter nenhuma exceção, mesmo quando Super tiver)

questionAnswers(2)

yourAnswerToTheQuestion