Copie o código do código da seguinte forma:
classe pública Teste4 {
@Teste
teste de vazio público(){
filho filho = novo filho();
}
}
classe pai{
public static String parentStaticField = "Variável estática da classe pai";
public String parentNormalField = "Variável normal da classe pai";
estático {
System.out.println(parentStaticField);
System.out.println("Bloco estático da classe pai");
}
{
System.out.println(parentNormalField);
System.out.println("Bloco comum da classe pai");
}
pai público(){
System.out.println("Construtor da classe pai");
}
}
classe filho estende pai{
public static String childStaticField = "Variável estática da subclasse";
public String childNormalField = "Variável normal da subclasse";
estático {
System.out.println(childStaticField);
System.out.println("Bloco estático da subclasse");
}
{
System.out.println(filhoNormalField);
System.out.println("Bloco comum da subclasse");
}
filho público(){
System.out.println("Construtor de subclasse");
}
}
Saída:
Copie o código do código da seguinte forma:
variável estática da classe pai
bloco estático da classe pai
Variáveis estáticas de subclasse
bloco estático de subclasse
Variável ordinária da classe pai
Bloco normal da classe pai
Construtor da classe pai
Variáveis comuns de subclasse
Bloco normal de subclasse
Construtor de subclasse
Processo de execução:
1. Ao executar um novo filho, o carregador procura o código da classe filha compilada (ou seja, o arquivo child.class). Durante o processo de carregamento, o carregador percebe que possui uma classe base, então carrega a classe base novamente. Este processo sempre acontecerá independentemente de você criar um objeto de classe base ou não. Se a classe base tiver outra classe base, a segunda classe base também será carregada e assim por diante.
2. Execute a inicialização estática da classe base raiz, depois a inicialização estática da próxima classe derivada e assim por diante. Esta ordem é muito importante porque a "inicialização estática" da classe derivada pode depender da inicialização correta dos membros da classe base.
3. Quando todas as classes necessárias tiverem sido carregadas, crie um objeto de classe filho.
4. Se a classe filha tiver uma classe pai, o construtor da classe pai será chamado. Você pode usar super para especificar qual construtor chamar.
O processo de construção e a sequência de construção da classe base são iguais aos da classe derivada. Primeiro, cada variável na classe base é inicializada em ordem literal e, em seguida, o restante do construtor da classe base é executado.
5. Inicialize os dados dos membros da subclasse na ordem em que são declarados e execute o restante do construtor da subclasse.