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() :

Costruttore Di Concatenamento In 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();
}
}



Uscita:

755The Default constructor

Regole di concatenamento del costruttore :

  1. L’espressione this () dovrebbe sempre essere la prima riga del costruttore.
  2. Dovrebbe esserci almeno un costruttore senza la parola chiave this () (costruttore 3 nell’esempio precedente).
  3. 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.