Ainda estou meio confuso com esse assunto de tratamento de erros.Mas esse exercício é como se fosse:
a classe ExceptionA fosse a Classe Exception(da API)
e as classes ExceptionB e C fossem as suas subclasses?
Dúvida:
Por exemplo se eu criasse um catch: catch(Exception exception)
e desse uma exceção de IOException(que é subclasse)ela ia iria capturar?
E como se fosse uma forma mais generalizada?
Todas as classes de exceção que eu precisar criar precisa herda Throwable?
Aqui é questão de interpretação de texto.
ExceptionA vai herdar de Exception.
ExceptionB herda de ExceptionA
ExceptionC herda de ExceptionB
Sim, mas o problema é que toda Exception é subclasse de Exception, logo, este catch capturaria qualquer Exception que fosse lançada.
Ao contrário, você captura da mais específica para a mais genérica:
Por exemplo no seu exercício, você deveria capturar primeiro ExceptionC, depois ExceptionB, depois ExceptionA e depois Exception.
Não, basta herdar de Exception(ou RuntimeException - aqui você precisa ler um pouco sobre exceções checadas e não checadas). A própria classe Exception ja herda de Throwable.
Voce tem de herdar direta ou indiretamente de Throwable sim, mas pode ser de qualquer uma das filhas, netas, etc… (acho que era isso que ele queria perguntar Nunes)
Rafael_Nunes
Para trabalhar com lançamento e captura de Exceptions, como ele precisa, ele deve herdar de Exception/RuntimeException(que herdam de Throwable e indiretamente ele acaba herdando como você disse), mas herdando diretamente de Throwable, ele não está trabalhando exatamente com Exceptions, e sim com objetos que podem ser lançados -no caso ou uma Exception ou um Error-. Certo?
Paulo_Silveira
Para trabalhar com lançamento e captura de Exceptions, como ele precisa, ele deve herdar de Exception/RuntimeException(que herdam de Throwable e indiretamente ele acaba herdando como você disse), mas herdando diretamente de Throwable, ele não está trabalhando exatamente com Exceptions, e sim com objetos que podem ser lançados -no caso ou uma Exception ou um Error-. Certo?
Sim, como ele precisa ele deve herdar de Exception, mas minha frase foi mais conceitual, e quis dizer que ele eh obrigado herdar de Throwable pra funcionar, de uma maneira ou de outra, nao que ele deva fazer isso diretamente.
A spec da JVM eh tao zuada nesse ponto, que nem define se herdando de Throwable temos uma checked ou unchecked. A JVM da sun e o javac da sun considera checked.