GeeksforGeeks

condiție prealabilă – constructori în Java
înlănțuirea constructorului este procesul de apelare a unui constructor de la un alt constructor în ceea ce privește obiectul curent.
înlănțuirea constructorului se poate face în două moduri:

  • în cadrul aceleiași clase: se poate face folosind acest() cuvânt cheie pentru constructori în aceeași clasă
  • din clasa de bază: prin utilizarea super() cuvânt cheie pentru a apela constructor din clasa de bază.

înlănțuirea constructorului are loc prin moștenire. Sarcina unui constructor de sub-clasă este de a apela mai întâi constructorul super-clasei. Acest lucru asigură că crearea obiectului subclasei începe cu inițializarea membrilor de date AI super-clasei. Ar putea exista orice număr de clase în lanțul de moștenire. Fiecare constructor apelează lanțul până când se ajunge la clasa din vârf.

de ce avem nevoie de înlănțuirea constructorului ?
acest proces este utilizat atunci când dorim să efectuăm mai multe sarcini într-un singur constructor, mai degrabă decât să creăm un cod pentru fiecare sarcină într-un singur constructor, creăm un constructor separat pentru fiecare sarcină și facem lanțul lor, ceea ce face programul mai lizibil.

înlănțuirea constructorului în aceeași clasă folosind acest () cuvânt cheie :

Constructor Înlănțuire În 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();
}
}



ieșire:

755The Default constructor

reguli de înlănțuire constructor :

  1. expresia this () ar trebui să fie întotdeauna prima linie a constructorului.
  2. ar trebui să existe cel puțin un constructor fără acest() cuvânt cheie (constructor 3 în exemplul de mai sus).
  3. înlănțuirea constructorului poate fi realizată în orice ordine.

ce se întâmplă dacă schimbăm ordinea constructorilor?

nimic, înlănțuirea constructorului poate fi realizată în orice 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);
}
}



ieșire:

default580

notă: În exemplul 1, constructorul implicit este invocat la sfârșit, dar în exemplul 2 constructorul implicit este invocat la început. Prin urmare, ordinea în înlănțuirea constructorului nu este importantă.

Constructor înlănțuirea la altă clasă folosind super () cuvinte cheie :

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");
}
}



ieșire:

Calling parameterized constructor of baseCalling parameterized constructor of derived

notă: Similar cu înlănțuirea constructorului în aceeași clasă, super() ar trebui să fie prima linie a constructorului, deoarece constructorul super class este invocat înainte de constructorul subclasei.

metodă alternativă : folosind blocul Init:
când dorim ca anumite resurse comune să fie executate cu fiecare constructor, putem pune codul în blocul init. Blocul Init este întotdeauna executat înaintea oricărui constructor, ori de câte ori un constructor este utilizat pentru crearea unui obiect nou.

Exemplul 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);
}
}



ieșire:

init blockdefaultinit block10

NOTĂ: Dacă există mai multe blocuri, acestea sunt executate în ordinea în care sunt definite în cadrul aceleiași clase. Vezi fostul.
exemplu :

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);
}
}



ieșire :

initseconddefaultinitsecond10

acest articol este contribuit de Apoorva singh. Dacă vă place GeeksforGeeks și ar dori să contribuie, puteți scrie, de asemenea, un articol folosind contribuie.tocilari.org sau mail articolul dumneavoastră la [email protected]. vedeți articolul dvs. care apare pe pagina principală GeeksforGeeks și ajutați alți Geeks.

Lasă un răspuns

Adresa ta de email nu va fi publicată.