SCJP: el método de anulación con manejo de excepciones genera un error del compilador

En el libro SCJP de Kathey Sierra, un extracto es el siguiente:

Si se anula un método pero usa una referencia polimórfica (supertipo) para referirse al objeto de subtipo con el método de anulación, el compilador asume que está llamando a la versión de supertipo del método. Si la versión de supertipo declara una excepción marcada, pero el método de subtipo de anulación no lo hace, el compilador aún cree que está llamando a un método que declara una excepción (más en el Capítulo 5).

Veamos un ejemplo:

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 no se compilará debido a la excepción declarada en el método Animal eat (). Esto sucede aunque, en tiempo de ejecución, el método eat () utilizado sería la versión Dog, que no declara la excepción.

Ahora lo que no entiendo es que cómoa.eat(); plantea un error del compilador? (la función anulada en el niño puede no tener ninguna Excepción, incluso cuando Super sí)

Respuestas a la pregunta(2)

Su respuesta a la pregunta