AssertionError e Error

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…