Chame outro construtor em Java

  1. Chame um construtor de outro dentro da mesma classe em Java
  2. 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 principal 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