Přetížení konstruktoru v Java
⚡ Chytré shrnutí
Přetížení konstruktoru v Java umožňuje třídě deklarovat více konstruktorů, které se liší seznamem parametrů, což vývojářům poskytuje flexibilní inicializaci objektů, čistší opětovné použití kódu prostřednictvím this() a předvídatelné chování, kdykoli jsou při vytváření instance vyžadovány výchozí nebo vlastní hodnoty.
Co je přetížení konstruktoru v Java?
Přetížení konstruktoru v Java je technika, při které třída deklaruje více konstruktorů, které se liší seznamem parametrů. Kompilátor tyto konstruktory rozlišuje analýzou počtu parametrů a jejich datových typů.
Příklady platných konstruktorů pro třídu Účet jsou uvedeny níže:
Account(int a); Account (int a,int b); Account (String a,int b);
Proč potřebujeme přetížení konstruktoru v Java?
Přetížení konstruktoru v Java Zlepšuje flexibilitu a efektivitu kódu tím, že umožňuje použití několika konstruktorů ve třídě, každý s jiným seznamem parametrů.
- Flexibilita při vytváření objektů: Přetížení konstruktoru umožňuje inicializovat objekty různými způsoby v závislosti na počtu nebo typu parametrů.
- Code Opětovná použitelnost: Logiku konstruktoru můžete znovu použít voláním jednoho konstruktoru z jiného pomocí tento() klíčové slovo.
- Vylepšená čitelnost: Přetížené konstruktory dělají kód intuitivnějším tím, že nabízejí specifické možnosti pro různé potřeby inicializace.
- Výchozí a vlastní inicializace: Přetížení konstruktoru umožňuje snadno vytvářet výchozí i vlastní inicializované objekty.
Příklad: Přetížení konstruktoru v Java
Následující příklad demonstruje přetížení konstruktoru v Java pomocí třídy s názvem Demonstrace.
Krok 1) Zadejte kód do editoru.
class Demo{ int value1; int value2; /*Demo(){ value1 = 10; value2 = 20; System.out.println("Inside 1st Constructor"); }*/ Demo(int a){ value1 = a; System.out.println("Inside 2nd Constructor"); } Demo(int a,int b){ value1 = a; value2 = b; System.out.println("Inside 3rd Constructor"); } public void display(){ System.out.println("Value1 === "+value1); System.out.println("Value2 === "+value2); } public static void main(String args[]){ Demo d1 = new Demo(); Demo d2 = new Demo(30); Demo d3 = new Demo(30,40); d1.display(); d2.display(); d3.display(); } }
Krok 2) Uložte, zkompilujte a spusťte kód.
Krok 3) Zobrazí se chyba. Zkuste chybu odladit, než budete pokračovat k dalšímu kroku přetížení konstruktoru v Java.
Krok 4) Každá třída má výchozí Konstruktér v JavaVýchozí konstruktor pro třída Demo is Demo()Pokud jej neposkytnete, kompilátor jej vytvoří za vás a inicializuje proměnné na výchozí hodnoty.
Pokud však zadáte parametrizovaný konstruktor, jako například Demo(int a) a chcete použít výchozí nastavení Demo(), je povinné to explicitně deklarovat.
Krok 5) Odkomentujte řádky 4-8 kódu, poté program uložte, zkompilujte a znovu spusťte, abyste pozorovali změnu chování.
Řetězení konstruktorů Java
Zvažte scénář, kdy je základní třída rozšířena o potomka. Kdykoli je vytvořen objekt podřízené třídy, je nejprve vyvolán konstruktor nadřazené třídy. Tomu se říká Řetězení konstruktorů.
Příklad: Pochopit řetězení konstruktorů s přetížením konstruktoru v Java
Krok 1) Zkopírujte následující kód do editoru.
class Demo{ int value1; int value2; Demo(){ value1 = 1; value2 = 2; System.out.println("Inside 1st Parent Constructor"); } Demo(int a){ value1 = a; System.out.println("Inside 2nd Parent Constructor"); } public void display(){ System.out.println("Value1 === "+value1); System.out.println("Value2 === "+value2); } public static void main(String args[]){ DemoChild d1 = new DemoChild(); d1.display(); } } class DemoChild extends Demo{ int value3; int value4; DemoChild(){ //super(5); value3 = 3; value4 = 4; System.out.println("Inside the Constructor of Child"); } public void display(){ System.out.println("Value1 === "+value1); System.out.println("Value2 === "+value2); System.out.println("Value1 === "+value3); System.out.println("Value2 === "+value4); } }
Krok 2) Spusťte kód. Vzhledem k řetězení konstruktorů, když objekt podřízené třídy DemoChild je vytvořen konstruktor Demo() nadřazené třídy je volána jako první a konstruktor DemoChild() dítěte běží dál.
Očekávaný výstup:
Inside 1st Parent Constructor Inside the Constructor of Child Value1 === 1 Value2 === 2 Value1 === 3 Value2 === 4
Krok 3) Můžete si všimnout, že konstruktor nadřazené třídy Demo() běží ve výchozím nastavení. Volání přetíženého konstruktoru Demo(int a) místo toho použijte klíčové slovo „Super“.
Syntaxe:
super(); --or-- super(parameter list);
Příklad: Pokud je váš nadřazený konstruktor podobný Demo(Řetězec Název, int a), upřesníte super("Java“,5). Pokud je použito, klíčové slovo skvělý musí být prvním řádkem kódu v konstruktoru podřízené třídy.
Krok 4) Odkomentujte řádek 26 a spusťte kód. Sledujte výstup.
Výstup:
Inside 2nd Parent Constructor Inside the Constructor of Child Value1 === 5 Value2 === 0 Value1 === 3 Value2 === 4

