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() :
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:
- La expresión this() siempre debe ser la primera línea del constructor.
- Debería haber al menos un constructor sin la palabra clave this () (constructor 3 en el ejemplo anterior).
- 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.