Llamar a otro constructor en Java

Rupam Yadav 12 octubre 2023
  1. Llamada a un constructor desde otro dentro de la misma clase en Java
  2. Llamada a un constructor desde otro de la clase base en Java
Llamar a otro constructor en Java

En Java, la secuencia de invocar constructores al inicializar el objeto se llama encadenamiento de constructores. Se utiliza cuando queremos invocar un constructor tras otro utilizando una instancia.

Llamada a un constructor desde otro dentro de la misma clase en Java

Cuando queremos llamar a un constructor desde otro constructor dentro de la misma clase, utilizamos la palabra clave this. Una expresión que utiliza la palabra clave this debe ser la primera línea del constructor. El orden no importa en el encadenamiento de constructores. Debe tener al menos un constructor que no utilice la palabra clave this.

En el siguiente ejemplo, tenemos una clase Test que tiene 3 constructores. Uno es el que viene por defecto sin ningún parámetro, mientras que los otros dos están parametrizados. En el método main, instanciamos el objeto de la clase con la palabra clave new sin pasar ningún parámetro.

Se invoca el constructor por defecto Test() que redirige la llamada al constructor parametrizado Test(String name) utilizando this("Steve"). El constructor Test(String name) redirige la llamada al otro constructor parametrizado Test(int age, String place) utilizando this(30,"Texas").

Las sentencias dentro de Test(int age, String place) se ejecutan primero. Después, se ejecuta el resto de las sentencias del constructor Test(String name). Finalmente, se ejecuta la sentencia restante del constructor por defecto, y el objeto se inicializa con éxito.

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();
  }
}

Producción :

Age- 30, place- Texas
Name - Steve
Default Constructor

Llamada a un constructor desde otro de la clase base en Java

Cuando hay más de una clase con relación de herencia, necesitamos usar la palabra clave super para llamar al constructor de la clase padre desde la clase hija. A diferencia de la palabra clave this, la JVM pone automáticamente la palabra clave super.

La clase base es la clase padre que es extendida por la clase derivada. El método main en el que instanciamos el objeto de la clase invoca el constructor por defecto de la misma clase, que además redirige la llamada al constructor parametrizado de la clase hija utilizando this("Adam").

super(name) invoca el constructor parametrizado Base(String name) de la clase Base. El constructor por defecto de la clase Base es invocado usando this(). La variable de clase también se inicializa aquí usando this.name = name.

El código dentro del constructor por defecto de la clase Base se ejecuta. Después se ejecutan las sentencias dentro del constructor parametrizado Base(String name). Finalmente, se ejecuta la sentencia restante dentro del constructor parametrizado de la clase Derived.

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 Yadav avatar Rupam Yadav avatar

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

Artículo relacionado - Java Constructor