Llamar a otro constructor en Java
- Llamada a un constructor desde otro dentro de la misma clase en Java
- Llamada a un constructor desde otro de la clase base 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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn