Construtores e excessões

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?

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.

obrigado!

gostei da sua assinatura!