GeeksforGeeks
Prerequisito – Costruttori in Java
Il concatenamento del costruttore è il processo di chiamata di un costruttore da un altro costruttore rispetto all’oggetto corrente.
Il concatenamento del costruttore può essere fatto in due modi:
- All’interno della stessa classe: Può essere fatto usando questa parola chiave() per i costruttori nella stessa classe
- Dalla classe base: usando la parola chiave super() per chiamare il costruttore dalla classe base.
Il concatenamento del costruttore avviene tramite ereditarietà. Il compito di un costruttore di sottoclasse è quello di chiamare prima il costruttore della super classe. Ciò garantisce che la creazione dell’oggetto della sottoclasse inizi con l’inizializzazione dei membri dei dati della super classe. Potrebbe esserci un numero qualsiasi di classi nella catena di ereditarietà. Ogni costruttore richiama la catena fino al raggiungimento della classe in alto.
Perché abbiamo bisogno del concatenamento del costruttore ?
Questo processo viene utilizzato quando vogliamo eseguire più attività in un singolo costruttore piuttosto che creare un codice per ogni attività in un singolo costruttore creiamo un costruttore separato per ogni attività e facciamo la loro catena che rende il programma più leggibile.
Concatenamento del costruttore all’interno della stessa classe usando questa parola chiave() :
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();
}
}
Uscita:
755The Default constructor
Regole di concatenamento del costruttore :
- L’espressione this () dovrebbe sempre essere la prima riga del costruttore.
- Dovrebbe esserci almeno un costruttore senza la parola chiave this () (costruttore 3 nell’esempio precedente).
- Il concatenamento del costruttore può essere raggiunto in qualsiasi ordine.
Cosa succede se cambiamo l’ordine dei costruttori?
Niente, Costruttore di concatenazione può essere raggiunto in qualsiasi ordine
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
);
}
}
Uscita:
default580
NOTA: Nell’esempio 1, il costruttore predefinito viene richiamato alla fine, ma nell’esempio 2 il costruttore predefinito viene richiamato all’inizio. Quindi, l’ordine nel concatenamento del costruttore non è importante.
Concatenamento del costruttore ad un’altra classe usando la parola chiave 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"
);
}
}
Uscita:
Calling parameterized constructor of baseCalling parameterized constructor of derived
Nota : Simile al costruttore di concatenamento nella stessa classe, super() deve essere la prima riga del costruttore, come super costruttore della classe vengono richiamati prima il sub costruttore della classe.
Metodo alternativo : utilizzo del blocco Init:
Quando vogliamo che determinate risorse comuni vengano eseguite con ogni costruttore, possiamo inserire il codice nel blocco init. Il blocco Init viene sempre eseguito prima di qualsiasi costruttore, ogni volta che un costruttore viene utilizzato per creare un nuovo oggetto.
Esempio 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
);
}
}
Uscita:
init blockdefaultinit block10
NOTA: Se ci sono più blocchi, vengono eseguite nell’ordine in cui sono definiti all’interno della stessa classe. Vedi l’ex.
Esempio :
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
);
}
}
Uscita :
initseconddefaultinitsecond10
Questo articolo è un contributo di Yacouba singh. Se ti piace GeeksforGeeks e vorresti contribuire, puoi anche scrivere un articolo usando contribute.geeksforgeeks.org o posta il tuo articolo a [email protected]. Vedere il tuo articolo che appare sulla pagina principale GeeksforGeeks e aiutare altri Geek.