Chame outro construtor em Java
- Chame um construtor de outro dentro da mesma classe em Java
- Chame um construtor de outro da classe base em Java
Em Java, a sequência de invocação de construtores na inicialização do objeto é chamada de encadeamento de construtor. É usado quando queremos invocar um construtor após o outro usando uma instância.
Chame um construtor de outro dentro da mesma classe em Java
Quando queremos chamar um construtor de outro construtor da mesma classe, usamos a palavra-chave this. Uma expressão que usa a palavra-chave this deve ser a primeira linha do construtor. A ordem não importa no encadeamento do construtor. Deve ter pelo menos um construtor que não use a palavra-chave this.
No exemplo abaixo, temos uma classe Test que possui 3 construtores. Um é o padrão sem nenhum parâmetro, enquanto os outros dois são parametrizados. No método main, instanciamos o objeto de classe com a palavra-chave new sem nenhum parâmetro passado.
Ele invoca o construtor padrão Test() que redireciona a chamada para o construtor parametrizado Test(String name) usando this("Steve"). O construtor Test(String name) redireciona ainda mais a chamada para o outro construtor parametrizado Test(int age, String place) usando this(30,"Texas").
As instruções dentro de Test(int age, String place) são executadas primeiro. Depois disso, o resto das instruções do construtor Test(String name) são executadas. Finalmente, a instrução restante do construtor padrão é executada e o objeto é inicializado com sucesso.
public class Test {
Test() {
this("Steve");
System.out.println("Default Constructor");
}
Test(String name) {
this(30, "Texas");
System.out.println("Name - " + name);
}
Test(int age, String place) {
System.out.println("Age- " + age + ", place- " + place);
}
public static void main(String[] args) {
Test test = new Test();
}
}
Resultado:
Age- 30, place- Texas
Name - Steve
Default Constructor
Chame um construtor de outro da classe base em Java
Quando há mais de uma classe com o relacionamento de herança, precisamos usar a palavra-chave super para chamar o construtor da classe pai da classe filha. Ao contrário da palavra-chave this, a JVM coloca automaticamente a palavra-chave super.
A classe base é a classe pai que é estendida pela classe derivada. O método main no qual instanciamos o objeto de classe invoca o construtor padrão da mesma classe, que redireciona ainda mais a chamada para o construtor parametrizado da classe filha usando this("Adam").
super(name) invoca o construtor parametrizado Base(String name) da classe Base. O construtor padrão da classe Base é invocado usando this(). A variável de classe também é inicializada aqui usando this.name = name.
O código dentro do construtor padrão da classe Base é executado. Posteriormente, as instruções dentro do construtor parametrizado Base(String name) são executadas. Finalmente, a instrução restante dentro do construtor parametrizado da classe Derived é executada.
class Base {
String name;
Base() {
System.out.println("Default Constructor Base Class");
}
Base(String name) {
this();
this.name = name;
System.out.println("Parameterized Constructor Base Class called:- " + name);
}
}
class Derived extends Base {
Derived() {
this("Adam");
}
Derived(String name) {
super(name);
System.out.println("Parameterized Constructor Derived Class called: " + name);
}
public static void main(String[] args) {
Derived derived = new Derived();
}
}
Resultado:
Default Constructor Base Class
Parameterized Constructor Base Class called:- Adam
Parameterized Constructor Derived Class called: Adam
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn