O que é o encadeamento de construtores?
Um construtor em Java é um método específico usado na criação de objetos de uma classe. O construtor é invocado toda vez que um objeto da classe é criado. Ele pode ser usado para atribuir valores às propriedades do objeto no momento da criação. Pode haver vários construtores em uma classe Java com diferentes listas de parâmetros. O encadeamento de construtores é usado para invocar diferentes implementações de construtores da mesma classe/classe pai no momento da criação do objeto.
Como o encadeamento do construtor é implementado em Java?
Existem duas maneiras de encadear construtores com base em como chamar o construtor. Eles são os seguintes.
- usando a palavra-chave this() – para chamar construtores da mesma classe
- usando a palavra-chave super() – para chamar construtores da classe pai
Isso é explicado nos exemplos a seguir.
Exemplo de encadeamento de construtores nº 1 – Construtores são encadeados usando a palavra-chave this()
Declaramos quatro construtores para DerivedClass. Um sem argumentos e os outros três com argumentos diferentes. Dentro de cada construtor, a palavra-chave
this() é usada para chamar o próximo construtor da mesma classe.
package com.tutorialwriting.constchaining;
public class DerivedClass{
String firstName;
String country;
int age;
public DerivedClass() {
// calling one argument constructor
this("Maggie");
}
public DerivedClass(String firstName) {
// calling two argument constructor
this(firstName, 15);
}
public DerivedClass(String firstName, int age) {
// calling three argument constructor
this(firstName, age, "Australia");
}
public DerivedClass(String firstName, int age, String country) {
this.firstName = firstName;
this.age = age;
this.country = country;
}
void displayValues() {
System.out.println("First Name : " + firstName);
System.out.println("Country : " + country);
System.out.println("Age : " + age);
}
public static void main(String args[]) {
DerivedClass object = new DerivedClass();
object.displayValues();
}
}
A saída da execução
Exemplo de encadeamento de construtores nº 2 – Construtores são encadeados usando a palavra-chave super()
Aqui, a classe filha chama os construtores da classe pai usando a palavra-chave
super() . A BaseClass tem três construtores. O construtor sem argumentos chama um dos construtores de três argumentos da BaseClass usando
this() .
package com.tutorialwriting.constchaining;
public class BaseClass {
public BaseClass() {
//calling a three argument constructor of the same class
this("Male", "English", "1989/11/10");
System.out.println("I'm executed third!!!");
}
public BaseClass(String firstName, String surname, int idNo) {
System.out.println("I'm executed first!");
System.out.println("First name : " + firstName);
System.out.println("Surname : " + surname);
System.out.println("ID Number : " + idNo);
}
public BaseClass(String gender, String nationality, String birthDate) {
System.out.println("I'm executed second!!");
System.out.println("Gender : " + gender);
System.out.println("Nationality : " + nationality);
System.out.println("Birth Date : " + birthDate);
}
}
A DerivedClass tem dois construtores, cada um chamando os diferentes construtores da superclasse usando
super() .
package com.tutorialwriting.constchaining;
public class DerivedClass extends BaseClass {
public DerivedClass() {
//calling no argument constructor of the super class
super();
}
public DerivedClass(String firstName, String surname, int idNo) {
//calling three argument constructor of the super class
super(firstName, surname, idNo);
}
public static void main(String args[]) {
DerivedClass object2 = new DerivedClass("Paul", "Wilson", 123456);
DerivedClass object1 = new DerivedClass();
}
}
A saída da execução
Chamada de construtor implícita x explícita
Java tem duas maneiras diferentes de chamar construtores: chamada implícita e chamada explícita.
- A chamada explícita refere-se a chamar construtores explicitamente no código usando this() ou super() .
- A chamada implícita refere-se à chamada do construtor sem argumentos da superclasse implicitamente na ausência de tal chamada explícita do construtor da classe filha. Em outras palavras, o compilador adiciona a chamada super() como a primeira linha de qualquer um dos construtores das classes filhas se o programador explicitamente não chamar super() no código.
Por que precisamos do encadeamento de construtores?
Existem vários propósitos diferentes de ter uma cadeia de construtores em Java, conforme listado abaixo.
- É uma maneira de acessar as propriedades de outros construtores ou propriedades de classes pai.
- Ao chamar outros construtores, apenas um objeto está sendo usado, que é a instância atual da classe. A inicialização acontece em um só lugar, mas temos o privilégio de chamar diferentes implementações de construtor por meio de uma cadeia. Isso ajuda muito no gerenciamento de memória e na manutenção do código.
Conclusão
Neste tutorial, discutimos o encadeamento de construtores em Java. Os construtores são segmentos de código semelhantes a métodos que são invocados durante a criação de objetos. Uma classe Java pode ter qualquer número de construtores com diferentes listas de parâmetros. O encadeamento de construtores é uma maneira prática de lidar com diferentes inicializações com uma instância de uma classe. Alguns pontos importantes a serem observados neste tutorial estão listados abaixo.
- Se o programador não o adicionar explicitamente ao código, o compilador adicionará um construtor público sem argumentos à classe Java. Isso é chamado de construtor padrão.
- this() e super() devem ser escritos como a primeira linha do construtor.
- this() é usado para chamar construtores da mesma classe enquanto super() é usado para chamar construtores da superclasse imediata.
- Deve haver pelo menos um construtor dentro da classe que não contenha a palavra-chave this() .
- Se não for adicionado explicitamente, o compilador adiciona uma chamada super() sem argumentos a cada construtor de classe filho. Isso ajudará a instanciar as classes corretamente.
GO TO FULL VERSION