Java · Avançado · Português · Técnico
ordem de inicialização
Sequência em que Java prepara classes e objetos: estáticos do pai, estáticos do filho, depois instância e construtor do pai, e instância e construtor do filho.
Onde usar
Aparece em bugs onde o construtor do pai chama um método sobrescrito que lê um campo do filho ainda não inicializado, e vê null ou zero.
Em código
class Pai {
Pai() { iniciar(); }
void iniciar() {}
}
class Filho extends Pai {
String nome = "Ana";
void iniciar() { System.out.print(nome); }
} // new Filho() imprime nullExemplos
O campo veio null por causa da ordem de inicialização.
Não chama método sobrescrito no construtor do pai.
Cuidado
Chamar método sobrescrito no construtor é uma armadilha: o campo do filho ainda tem o valor padrão.