Galera, o negócio é o seguinte…
Imagine que há 2 classes de exceções chamadas Exc1 e Exc2 e que descendem da classe Exception. Dada estas duas definições de classes, criou-se uma classe chamada Terceira que estende de Segunda e que define o método test(). Quais exceções a classe Terceira poderá lançar?
class First {
void test() throws Exc1, Exc2 {...}
}
class Second extends First {
void test() {...}
}
Com essa questão obtive a seguinte resposta:
exceções não checadas, desde que o método da super classe não esteja lançando (throws) nenhuma exceção checada, a classe derivada não pode lançar outra.
Mas a super classe lança duas exceções derivadas da classe Exception e teriam que ser declaradas na interface pública do método da Second e da Terceira classes, não?
8O
donatinho
As exceções são declaradas pela classe First, a subclasse Second pode lançar as exceções Exc1 e Exc2, mas não pode lançar novas… porem a subclasse não é obrigada a declara-las, ou seja, a superclasse lança as exceções, mas a subclasse não…
Assim a Terceira classe não poderá lançar nenhuma exceção, pois sua superclasse (Second) não lança…
O que você precisa ter em mente disso tudo é que a subclasse não é obrigada a declarar nenhuma exceção, nem mesmo as que são declaradas pela superclasse, porem se optar por declarar, a exceção declarada não poderá ser mais abrangente que a da superclasse…
ex.:
[code]public class Classe1{
public void teste() throws IOException{
}
}
public class Classe2 extends Classe1{
public void teste(){ //ok, não quero lançar exceções
}
}
public class Classe3 extends Classe1{
public void teste() throws Exception{ /não posso fazer isso porque Exception é mais abrangente que IOException/
}
}
public class Classe4 extends Classe1{
public void teste() throws EOFException{ //ok, EOFException é subclasse de IOException
}
}[/code]