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.
Espero que tenha dado pra enteder!
[s]
T
tgpadua
a propósito, está pergunta é sobre uma substituição VÁLIDA se atente as regras disso.
M
Marcos_Paiva
O que eu não entendi é o seguinte.
Se eu tiver o código
Gostaria de saber porque coma AssertionError e Error é permitido,
visto que Error está mais acima na herança que AssertionError?
LPJava
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.
flw!!
R
RafaelVS
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]
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.
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.