public class AssertTest{
public void methodA(int i) throws AssertionError{
assert i<1024:“Invalid value”;
}
}
Quais métodos podem ser válidos para uma subclasse de AssertTest?
A - public void methodA(int i)
B - public void methodA(int i) throw Exceptio
C - public void methodA(int i) throw Throwable
D - public void methodA(int i) throw Error
E - Only option A is valid
Resposta A e D
Por que a letra D está correta se AssertionError é subclasse de Error?
É exatamente esse o motivo! Você pode modificar a exceção lançada pelo método por uma mais genérica, em outra palavras: Que esteja acima na árvore de herença. Mas nunca por uma mais específica.
marcos vc ta “metendo os pes, pelas maos” rs… mais falando serio… a AssertionError é um tipo de exceção é que da class Error… ela nao está acima nao… lembrese da hierarquia das exceções que vc mata qualquer questao… veja:
Throwable–> Exception --> RuntimeException.
Throwable–> Exception… //aqui as verificadas
Throwable --> Error- -> //aqui as nao verificadas que causaram erro.
As exceções de Error é quando aconteceu algo que nunca deveria ter acontecido na vida… um estouro de memoria por exemplo… nesse caso ai de assertion ser configurado para falso… jamais deve acontecer isso… entao AssertionError é uma exceção nao verificada da class Error que é uma exceção que algo jamais deveria ter ocorrido ou seja, assertion false.
[quote=tgpadua]É exatamente esse o motivo! Você pode modificar a exceção lançada pelo método por uma mais genérica, em outra palavras: Que esteja acima na árvore de herença. Mas nunca por uma mais específica.
Espero que tenha dado pra enteder!
[s][/quote]
Isso que vc falou ta tudo errado… é totalmente o contrário… vc NÃO pode sobrescrever um método colocando nenhuma exceções mais genérica nem mesmo novas exceções verificadas.
O que aconteceu nessa questão foi que na opção D o método declarou que lança Error, que é mais genérica que AssetionError mas que NÃO É VERIFICADA. Apenas por esse motivo a declaração é válida.
public void methodA(int i) throws IllegalArgumentException{
assert i<1024:"Invalid value";
}
public void methodA(int i) throws Exception{ }
Isso aqui não vale justamente porque Exception é VERIFICADA, assim sendo, não podemos sobrescrever declarando que o método lança uma exceção mais genérica.