Em Java, durante o processo de construção de uma subclasse, o construtor de sua classe pai deve ser chamado. Isso ocorre porque quando existe um relacionamento de herança, a subclasse deve herdar o conteúdo da classe pai.
A resposta é a seguinte:
Ao criar um novo objeto de subclasse, você deve primeiro criar um novo objeto da classe pai. Este objeto da classe pai está localizado dentro do objeto da subclasse. Portanto, o objeto da subclasse é maior que o objeto da classe pai. situação real na memória. Quando o método de construção é um novo objeto, ele deve ser chamado. Se você deseja novo o objeto da classe pai, você deve chamar seu método de construção, então:
A primeira regra: Durante o processo de construção de uma subclasse, o método de construção de sua classe pai deve ser chamado. Para uma classe, se não escrevermos um construtor, o compilador nos ajudará a adicionar um construtor padrão. O chamado construtor padrão é um construtor sem parâmetros, mas se você mesmo escrever o construtor, o compilador não será. adicionado para você, então às vezes quando você cria um novo objeto de subclasse, o construtor da subclasse deve ser chamado, mas no construtor da subclasse não chamamos explicitamente o construtor da classe base, ou seja, não há Escrita , como: super(); não é escrito assim, mas chamará o construtor sem parâmetros da classe pai. Se não houver construtor sem parâmetros na classe pai, ocorrerá um erro.
A segunda regra: Se não houver nenhuma chamada explícita ao construtor da classe base no construtor da subclasse, o sistema usará como padrão a chamada do construtor sem parâmetros da classe base. Nota: Se não houver uma chamada explícita ao construtor da classe base na classe base. construtor da subclasse e não há construtor padrão sem parâmetros na classe base, ocorre um erro de compilação. Portanto, geralmente precisamos exibir: super (lista de parâmetros) para chamar o construtor da classe pai com parâmetros.
//Se você definir um novo construtor
Animal público(Nome da string) {
este.nome = nome;
}
}
Cachorro público estende Animal{
//Neste momento, você deve chamar explicitamente o construtor da classe pai, porque a subclasse chama a classe pai por padrão.
//Sem construtor de parâmetro Animal()
cachorro público(){
super("puppy"); //Exibe o método construtor parametrizado de chamada da classe pai
.... // Processamento do método construtor de subclasses
}
}
//Claro, se você escrever explicitamente o construtor sem parâmetros na classe pai, por exemplo:
classe Animal{
nome da string privada;
//Método de construção sem parâmetros
Animal público() {
..... //tratar
}
/*
Se você definir um novo construtor, então no construtor da subclasse você poderá chamar o construtor da classe pai sem chamá-lo explicitamente, porque a subclasse possui um construtor sem parâmetros.
A subclasse chamará automaticamente o construtor sem parâmetros definido pela classe pai no construtor.
*/
Animal público(Nome da string) {
este.nome = nome;
}
}