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 :
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 :
- expresia this () ar trebui să fie întotdeauna prima linie a constructorului.
- ar trebui să existe cel puțin un constructor fără acest() cuvânt cheie (constructor 3 în exemplul de mai sus).
- î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.