Boa noite,
Peguei essa questão no Whizlabs.
public class AssertTest50 {
public void methodA(int i) throws AssertionError {
assert i < 1024 : "Invalid Value";
}
}
class AssertTest50Sub extends AssertTest50 {
public void methodA(int i) throws Error {
assert i < 1024 : "Invalid Value";
}
}
Não consegui entender porque isto compila, uma vez que Error é superclasse de AssertionError.
public class AssertTest50 {
public void methodA(int i) throws IOException {
assert i < 1024 : "Invalid Value";
}
}
class AssertTest50Sub extends AssertTest50 {
public void methodA(int i) throws Exception {
assert i < 1024 : "Invalid Value";
}
}
Neste exemplo não compila, uma vez que Exception é superclasse de IOException.
Alguém poderia explicar o que acontece no caso do Error?
Desde já agradeço.
E aí Diego, blz ?
A explicação é muito simples:
Lembre-se:
Todas as exceptions derivadas de [b]RuntimeException[/b] e [b]ERROR, NÃO PRECISAM SER DECLARADAS, E O COMPILADOR NÃO SE IMPORTARÁ SE ASSIM VOCÊ O FIZER E NÃO SEGUIRÁ AS REGRAS DAS EXCEPTIONS CHECKED.[/b]
Pela explicação acima é que o código de cima COMPILA (por que usa ERROR) e o de baixo NÃO COMPILA (IOException e Exception NÃO SÃO DERIVADAS DE RUNTIMEEXCEPTION).
Espero ter ajudado !!
Abraço,
Rodrigo Lopes.
iaew blz…
primeira coisa essa questão não e sobre assertion… mas sim sobre sobrescrita de metodo ^^
agora repare bem:
vc NUNCA pode declarar uma exceção mais abrangente no metodo sobrescrito!!!
então vamos lah…
no 1º caso essa regra não vale, pois AssertionError e ERROR e uma exceção NÃO VERIFICADA e o compilador não liga XD
agora no 2º caso IOException e Exception e uma execçaõ verificada… portanto dara erro na sobrecrita do metodo segundo regra acima XD
certinhu ^^^
espero ter ajudado… fui…
Ficou bem claro agora…
Obrigado…