GeeksforGeeks
Předpoklad – Konstruktory v Java
Konstruktoru řetězení je proces volá konstruktor z jiného konstruktoru s ohledem na aktuální objekt.
Konstruktoru řetězení může být provedeno dvěma způsoby:
- v Rámci stejné třídy: To může být provedeno pomocí této() klíčové slovo pro konstruktéry ve stejné třídě
- Od základní třídy: pomocí super() klíčové slovo volat konstruktor základní třídy.
řetězování konstruktoru probíhá prostřednictvím dědičnosti. Úkolem konstruktoru sub třídy je nejprve zavolat konstruktoru super třídy. Tím je zajištěno, že vytvoření objektu subtřídy začíná inicializací datových členů supertřídy. V řetězci dědičnosti může být libovolný počet tříd. Každý konstruktér vyvolá řetězec, dokud nedosáhne třídy nahoře.
proč potřebujeme řetězení konstruktorů ?
Tento proces se používá, když chceme provádět více úkolů v jeden konstruktor, spíše než vytvoření kódu pro každý úkol v jednom konstruktoru vytvoříme samostatný konstruktér pro každý úkol, a aby jejich řetězce, což je program čitelnější.
řetězení konstruktorů ve stejné třídě pomocí tohoto klíčového slova() :
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();
}
}
Výstup:
755The Default constructor
Pravidla konstruktor řetězení :
- Na tento() výraz by měl být vždy první řádek konstruktoru.
- měl by existovat alespoň jeden Konstruktor bez klíčového slova this () (Konstruktor 3 ve výše uvedeném příkladu).
- Konstruktor řetězení lze dosáhnout v libovolném pořadí.
co se stane, když změníme pořadí konstruktérů?
Nic, Konstruktor řetězení lze dosáhnout v libovolném pořadí
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
);
}
}
Výstup:
default580
POZNÁMKA: V příkladu 1 je výchozí konstruktor vyvolán na konci, ale v příkladu 2 je nejprve vyvolán výchozí konstruktor. Proto pořadí v konstruktoru řetězení není důležité.
řetězení konstruktoru do jiné třídy pomocí klíčového slova 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"
);
}
}
Výstup:
Calling parameterized constructor of baseCalling parameterized constructor of derived
Poznámka : Podobný konstruktoru řetězení ve stejné třídě, super() by měl být první řádek konstruktoru jako super třídy je konstruktor se volá před ponorka třídy je konstruktor.
alternativní metoda: použití bloku Init:
pokud chceme, aby určité společné prostředky byly provedeny s každým konstruktorem, můžeme kód vložit do bloku init. Blok Init je vždy proveden před jakýmkoli konstruktorem, kdykoli je Konstruktor použit pro vytvoření nového objektu.
Příklad 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
);
}
}
Výstup:
init blockdefaultinit block10
POZNÁMKA: Pokud existuje více než jeden bloků, které jsou provedeny v pořadí, v jakém jsou definovány v rámci stejné třídy. Podívejte se na ex.
příklad :
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
);
}
}
Výstup :
initseconddefaultinitsecond10
Tento článek je přispěl Apoorva singh. Pokud máte rádi GeeksforGeeks a chtěli byste Přispět, můžete také napsat článek pomocí contribute.geeksforgeeks.org nebo mailem váš článek [email protected]. Viz váš článek se objeví na GeeksforGeeks hlavní stránce a pomoci jiných Mágů.