exceções e métodos overridden

1 resposta
D

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

1 Resposta

J

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.:

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

   }
}
Criado 19 de setembro de 2006
Ultima resposta 19 de set. de 2006
Respostas 1
Participantes 2