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.