Construtores e excessões

2 respostas
marciolx

esta é uma dúvida, não uma pegadinha :wink:

qual o problema (ou regra que se aplica) com este código:

class A {
  A() throws Exception {}  // 1
}
class B extends A {
  B() throws Exception {}  // 2
}
class C extends A {}       // 3

construtores das subclasses precisam declarar as mesmas checked exceptions que os construtores de sua superclasse?

2 Respostas

T

Na verdade, quando voce nao coloca nenhum construtor, o compilador cria para voce um construtor default na seguinte forma:

C() {

super();

}

Como essa chamada super() vai executar um codigo com Exception , ela precisa ser lancada tb pelo construtor de C, por isso o codigo da erro.

Aproveitando a ocasiao, o uso de excessao em metodos override tambem tem um detalhe:

class A() {

public void doit() throws IOException {}

}
class B() {

public void doit() throws FileNotFoundException {}

}

Na classe B voce ta fazendo o override do metodo doit, soh que ao inves de lancar IOException, lanca uma FileNotFoundException. FileNotFoundException eh uma especializacao do IOException. Entao o codigo eh valido.

Espero que tenha ajudado.

George Tavares
  Tambem eh SCJP1.4 mas nao gosta de botar isso estampando na testa e nas assinaturas em tudo que eh canto.
marciolx

obrigado!

gostei da sua assinatura!

Criado 16 de julho de 2003
Ultima resposta 16 de jul. de 2003
Respostas 2
Participantes 2