GeeksforGeeks

Prerrequisito – Constructores en Java
El encadenamiento de constructores es el proceso de llamar a un constructor desde otro constructor con respecto al objeto actual.
El encadenamiento del constructor se puede hacer de dos maneras:

  • Dentro de la misma clase: Se puede hacer usando esta palabra clave() para constructores en la misma clase
  • Desde la clase base: usando la palabra clave super () para llamar al constructor desde la clase base.

El encadenamiento de constructores se produce por herencia. La tarea de un constructor de subclase es llamar primero al constructor de superclase. Esto garantiza que la creación del objeto de subclase comience con la inicialización de los miembros de datos de la superclase. Podría haber cualquier número de clases en la cadena de herencia. Cada constructor llama a la cadena hasta que se alcanza la clase en la parte superior.

¿Por qué necesitamos encadenamiento de constructores ?
Este proceso se usa cuando queremos realizar múltiples tareas en un solo constructor en lugar de crear un código para cada tarea en un solo constructor, creamos un constructor separado para cada tarea y hacemos su cadena, lo que hace que el programa sea más legible.

Encadenamiento de constructores dentro de la misma clase usando esta palabra clave() :

Constructor De Encadenamiento En Java

class Temp
{
Temp()
{
this(5);
System.out.println("The Default constructor");
}
Temp(int x)
{
this(5, 15);
System.out.println(x);
}
Temp(int x, int y)
{
System.out.println(x * y);
}
public static void main(String args)
{
new Temp();
}
}



Salida:

755The Default constructor

Reglas de encadenamiento de constructores:

  1. La expresión this() siempre debe ser la primera línea del constructor.
  2. Debería haber al menos un constructor sin la palabra clave this () (constructor 3 en el ejemplo anterior).
  3. El encadenamiento del constructor se puede lograr en cualquier orden.

¿Qué sucede si cambiamos el orden de los constructores?

Nada, Constructor de encadenamiento se puede lograr en cualquier orden

class Temp
{
Temp()
{
System.out.println("default");
}
Temp(int x)
{
this();
System.out.println(x);
}
Temp(int x, int y)
{
this(5);
System.out.println(x * y);
}
public static void main(String args)
{
new Temp(8, 10);
}
}



Salida:

default580

NOTA: En el ejemplo 1, el constructor predeterminado se invoca al final, pero en el ejemplo 2, el constructor predeterminado se invoca al principio. Por lo tanto, el orden en el encadenamiento del constructor no es importante.

Encadenamiento del constructor a otra clase usando la palabra clave super () :

class Base
{
String name;
Base()
{
this("");
System.out.println("No-argument constructor of" +
" base class");
}
Base(String name)
{
this.name = name;
System.out.println("Calling parameterized constructor"
+ " of base");
}
}
class Derived extends Base
{
Derived()
{
System.out.println("No-argument constructor " +
"of derived");
}
Derived(String name)
{
super(name);
System.out.println("Calling parameterized " +
"constructor of derived");
}
public static void main(String args)
{
Derived obj = new Derived("test");
}
}



Salida:

Calling parameterized constructor of baseCalling parameterized constructor of derived

Nota : Similar al constructor de encadenamiento en la misma clase, super() debe ser la primera línea de el constructor de la super constructor de la clase se invocan antes de la sub constructor de la clase.

Método alternativo: usando el bloque de inicio:
Cuando queremos que ciertos recursos comunes se ejecuten con cada constructor, podemos poner el código en el bloque de inicio. El bloque de inicio siempre se ejecuta antes que cualquier constructor, siempre que se use un constructor para crear un nuevo objeto.

Ejemplo 1:

class Temp
{
{
System.out.println("init block");
}
Temp()
{
System.out.println("default");
}
Temp(int x)
{
System.out.println(x);
}
public static void main(String args)
{
new Temp();
new Temp(10);
}
}



Salida:

init blockdefaultinit block10

NOTA: Si hay más de uno de los bloques, que se ejecutan en el orden en que están definidos dentro de la misma clase. Ve a ver al ex.
Ejemplo :

class Temp
{
{
System.out.println("init");
}
Temp()
{
System.out.println("default");
}
Temp(int x)
{
System.out.println(x);
}
{
System.out.println("second");
}
public static void main(String args)
{
new Temp();
new Temp(10);
}
}



Salida :

initseconddefaultinitsecond10

Este artículo es una contribución de Apoorva singh. Si te gustan los GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando contribute.frikis forgeeks.org o envíe su artículo a [email protected]. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.