exceções e métodos overridden

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]