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

Konstruktor Řetězení V Javě

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í :

  1. Na tento() výraz by měl být vždy první řádek konstruktoru.
  2. měl by existovat alespoň jeden Konstruktor bez klíčového slova this () (Konstruktor 3 ve výše uvedeném příkladu).
  3. 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ů.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.