Sobre Sobrescrição de Métodos

Galera, to com uma duvida aqui nesse código, olhem só:

[code]class Ping extends Util {

public static void main (String args[])   {
    Util u = new Ping();
    System.out.println(u.getInt("1"));
}

int getInt (String arg) { return Integer.parseInt(arg);}

}

public class Util {
int getInt (String x) throws Exception {return 7;}
}
[/code]

O mesmo não compila, porque o método chamado na linha 5 pede ou que eu declare que o método lança uma Exception ou que eu trate com o Try/Catch. Mas, a sobrescrição entra nessa brincadeira, e o meu novo método sobrescrito não declara nenhuma exceção, ou seja: O que tá acontecendo? Se eu sobrescrevi o método que declarava uma exceção com um método que não lança e não declara que lança uma exceção, porque ele pede o tratamento?

A questão aí não é a sobrescrita e sim a variável.

A variável u é do tipo Util, portanto ela “enxerga” os métodos declarados na classe Util, que está declarando a Exception.

No seu exemplo a variável está sendo carregada com um objeto Ping, mas nada impede que você a carregue com um objeto Util. Por isso o erro.

Então, não existe essa história de que é possível sobrescrever um método com uma exceção declarada por um método sem nenhuma exceção declarada, já que em tempo de compilação, ele enxerga o método da superclasse?

Olha, é um post meio antigo, mas acho que tem a ver com a sua dúvida:

http://www.guj.com.br/posts/list/2728.java

[quote=guiifreitas]Olha, é um post meio antigo, mas acho que tem a ver com a sua dúvida:

http://www.guj.com.br/posts/list/2728.java[/quote]

Po, guiifreitas, valew, esclareceu a dúvida, em tempo de compilação, somente os tipos são avaliados, assim como no casting.
Mas, tambem nos leva a avaliar, que esse negócio de deixar o novo método sem uma declaração de exceção é besteira, porque faz a pessoa cair nessa pegadinha.

Valew!