Encadeamento implícito e explícito do construtor

click fraud protection

Encadeamento de construtor em Java é simplesmente o ato de um construtor chamando outro construtor via herança. Isso acontece implicitamente quando uma subclasse é construída: sua primeira tarefa é chamar o método construtor de seu pai. Mas os programadores também podem chamar outro construtor explicitamente usando as palavras-chave esta() ou super(). o esta() palavra-chave chama outra construtor sobrecarregado na mesma classe; a super() A palavra-chave chama um construtor não padrão em uma superclasse.

Encadeamento implícito de construtor

O encadeamento de construtores ocorre através do uso de herança. A primeira tarefa de um método construtor de subclasse é chamar o método construtor de sua superclasse. Isso garante que a criação do objeto da subclasse comece com a inicialização das classes acima dele na cadeia de herança.

Pode haver qualquer número de classes em uma cadeia de herança. Todo método construtor chama a cadeia até que a classe no topo seja alcançada e inicializada. Em seguida, cada classe subseqüente abaixo é inicializada à medida que a corrente volta à subclasse original. Esse processo é chamado de encadeamento de construtor.

instagram viewer

Observe que:

  • Essa chamada implícita à superclasse é a mesma que se a subclasse tivesse incluído o super() palavra-chave, ou seja, super() está implícito aqui.
  • Se um construtor no-args não for incluído na classe, o Java criará um nos bastidores e o chamará. Isso significa que, se seu único construtor adotar um argumento, você deverá explicitamente use um esta() ou super() para invocá-la (veja abaixo).

Considere este superclasse Animal estendido por Mammal:

classe Animal {
// construtor
Animal(){
 System.out.println ("Estamos no construtor da classe Animal.");
}
}
classe Mammal estende Animal {
//constructor
Mamífero(){
 System.out.println ("Estamos no construtor da classe Mammal.");
}
}

Agora, vamos instanciar a classe Mammal:

classe pública ChainingConstructors {
 /**
* @param args
*/
public static void main (String [] args) {
Mamífero m = novo mamífero ();
}
}

Quando o programa acima é executado, o Java aciona implicitamente uma chamada para o construtor Animal da superclasse e depois para o construtor da classe. A saída, portanto, será:

Estamos na classe Construtor de animais
Estamos no construtor da classe Mammal

Encadeamento explícito de construtor usando this () ou super ()

Uso explícito do esta() ou super() keywords permite chamar um construtor não padrão.

  • Para chamar um construtor padrão não args ou um construtor sobrecarregado de dentro da mesma classe, use o esta() palavra-chave
  • Para chamar um construtor de superclasse não padrão de uma subclasse, use o super() palavra-chave Por exemplo, se a superclasse tiver vários construtores, uma subclasse sempre poderá chamar um construtor específico, e não o padrão.

Observe que a chamada para outro construtor deve ser a primeira instrução no construtor ou Java irá lançar um erro de compilação.

Considere o código abaixo no qual uma nova subclasse, Carnivore, herda da classe Mammal que herda da classe Animal, e cada classe agora tem um construtor que usa um argumento.

Aqui está a superclasse Animal:

classe pública Animal
nome de string privado;
public Animal (String name) // construtor com um argumento
{
this.name = nome;
System.out.println ("Eu sou executado primeiro.");
}
}
Observe que o construtor agora faz uma nome do tipo Corda como um parâmetro e que o corpo da classe chama esta() no construtor. Sem o uso explícito de este nome, O Java criaria um construtor padrão no-args e o chamaria.

Aqui está a subclasse Mammal:

classe pública Mammal estende Animal {
Mamífero público (nome da sequência)
{
super (nome);
System.out.println ("Eu sou executado segundo");
}
}

Seu construtor também aceita um argumento e usa super (nome) invocar um construtor específico em sua superclasse.

Aqui está outra subclasse Carnivore. Isso herda do Mammal:

classe pública Carnivore estende Mammal {
Carnívoro público (nome da sequência)
{
super (nome);
System.out.println ("Fui executado por último");
}
}

Quando executados, esses três blocos de código são impressos:

Eu sou executado primeiro.
Eu sou executado em segundo.
Eu sou executado por último.

Para recapitular: Quando uma instância da classe Carnivore é criada, a primeira ação do método construtor é chamar o método construtor Mammal. Da mesma forma, a primeira ação do método construtor Mammal é chamar o método construtor Animal. Uma cadeia de chamadas de método construtor garante que a instância do objeto Carnivore tenha inicializado corretamente todas as classes em sua cadeia de herança.

instagram story viewer