Přetížení konstruktoru v Java

V jakém přetížení konstruktoru Java?

Java Přetížení konstruktoru je technika, ve které může mít třída libovolný počet konstruktorů, které se liší v seznamu parametrů. Kompilátor tyto konstruktory odlišuje tím, že bere v úvahu počet parametrů v seznamu a jejich typ.

Příklady platných konstruktorů pro třídu Account jsou

Account(int a);
Account (int a,int b);
Account (String a,int b);

Příklad 2: Abychom pochopili přetížení konstruktoru v Java

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) Chyba = ?. Než budete pokračovat k dalšímu kroku, zkuste chybu odladit Java přetížení konstruktoru

Krok 4) Každá třída má výchozí Konstruktér v Java. Výchozí přetížený konstruktor Java for třída Demo is Demo(). V případě, že tento konstruktor nezadáte, kompilátor jej vytvoří za vás a inicializuje proměnné na výchozí hodnoty. Můžete se rozhodnout přepsat tento výchozí konstruktor a inicializovat proměnné na požadované hodnoty, jak je znázorněno v příkladu 1.

Ale pokud zadáte parametrizovaný konstruktor, jako je Demo(int a), a chcete použít výchozí konstruktor Java Demo(), je pro vás povinné ji zadat.

Jinými slovy, v případě, že se váš konstruktor přetíží Java je přepsáno a chcete použít výchozí konstruktor Java, je třeba jej upřesnit.

Krok 5) Odkomentujte řádek č. 4-8. Uložte, zkompilujte a spusťte kód.

Proč potřebujeme přetížení konstruktoru Java?

Přetížení konstruktoru Java umožňuje více konstruktorů ve třídě, z nichž každý má různé seznamy parametrů. Zvyšuje flexibilitu a zlepšuje efektivitu kódu.

  • 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ů.
  • Znovupoužitelnost kódu: Logiku konstruktoru můžete znovu použít voláním jednoho konstruktoru z jiného pomocí klíčového slova this().
  • Vylepšená čitelnost: Přetížené konstruktory pomáhají dělat kód intuitivnějším tím, že nabízejí specifické možnosti konstruktoru pro různé potřeby inicializace.
  • Výchozí a vlastní inicializace: Přetížení konstruktoru vám umožňuje snadno vytvářet výchozí i vlastní inicializované objekty.

Nejčastější dotazy

Stavitel je speciální metoda, která se používá k inicializaci nově vytvořeného objektu a je volána hned po přidělení paměti pro daný objekt. Lze jej použít k inicializaci objektů na požadované hodnoty nebo výchozí hodnoty v době vytváření objektu. Pro kodéra není povinné napsat konstruktor pro třídu.

Pokud není pro třídu poskytnut žádný uživatelsky definovaný konstruktor, kompilátor inicializuje členské proměnné na jejich výchozí hodnoty.

  • číselné datové typy jsou nastaveny na 0
  • datové typy char jsou nastaveny na null character('\0')
  • referenční proměnné jsou nastaveny na hodnotu null

  1. Má to stejné jméno jako třída
  2. Nemělo by vrátit hodnotu ani ne zrušit

Příklad 1: Vytvořte si svého prvního konstruktéra v Java

Krok 1) Zadejte následující konstruktorový program Java editor.

class Demo{
      int  value1;
      int  value2;
      Demo(){
         value1 = 10;
         value2 = 20;
         System.out.println("Inside Constructor");
     }
 
     public void display(){
        System.out.println("Value1 === "+value1);
        System.out.println("Value2 === "+value2);
    }
 
   public static void main(String args[]){
       Demo d1 = new Demo();
      d1.display();
  }
}

Krok 2) Uložte, spusťte a zkompilujte program konstruktoru Java a sledujte výstup.

Očekávaný výstup:

Inside Constructor
Value1 === 10
Value2 === 20

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í konstruktoru.

Příklad 3: Abychom pochopili řetězení konstruktorů

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. Díky řetězení konstruktoru se při vytvoření objektu podřízené třídy DemoChild nejprve vyvolá konstruktor Demo() nadřazené třídy a později se vytvoří konstruktor DemoChild() potomka.

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 pozorovat, že konstruktor nadřazené třídy Demo je přepsán. Co když chcete zavolat přepsaný konstruktor Demo(int a) namísto výchozího konstruktoru Demo(), když je vytvořen váš podřízený objekt?

V takových případech můžete použít klíčové slovo „Super“ k volání přepsaných konstruktorů nadřazené třídy.

Syntax:-

super();
--or--
super(parameter list);

Příklad: Pokud je váš konstruktor jako Demo (název řetězce, int a), upřesníte super("Java“,5). Pokud je použito, klíčové slovo super musí být první řádek kódu v konstruktoru dětské 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