Przeciążanie konstruktora w Java

Jakie przeciążanie konstruktora w Java?

Java Przeciążanie konstruktorów to technika, w której klasa może mieć dowolną liczbę konstruktorów różniących się listą parametrów. Kompilator różnicuje te konstruktory, biorąc pod uwagę liczbę parametrów na liście i ich typ.

Przykłady prawidłowych konstruktorów dla klasy Konto to:

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

2 przykład: Aby zrozumieć Przeciążanie konstruktora w Java

Krok 1) Wpisz kod w edytorze.

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) Zapisz, skompiluj i uruchom kod.

Krok 3) Błąd =?. Spróbuj usunąć błąd przed przejściem do następnego kroku Java przeciążenie konstruktora

Krok 4) Każda klasa ma wartość domyślną Konstruktor w Java. Domyślny przeciążony konstruktor Java dla demonstracja klasy is Próbny(). Jeśli nie podasz tego konstruktora, kompilator utworzy go za Ciebie i inicjuje zmienne do wartości domyślnych. Możesz zastąpić ten domyślny konstruktor i zainicjować zmienne do żądanych wartości, jak pokazano w przykładzie 1.

Ale jeśli określisz konstruktora parametrycznego, takiego jak Demo(int a), i chcesz użyć konstruktora domyślnego Java Demo(), jego określenie jest obowiązkowe.

Innymi słowy, w przypadku, gdy konstruktor przeciążający znajduje się w Java jest zastąpiony i chcesz użyć konstruktora domyślnego Java, należy to określić.

Krok 5) Odkomentuj wiersz nr 4-8. Zapisz, skompiluj i uruchom kod.

Dlaczego potrzebujemy przeciążania konstruktora w Java?

Przeciążanie konstruktora w Java pozwala na wiele konstruktorów w klasie, każdy z różnymi listami parametrów. Zwiększa elastyczność i poprawia wydajność kodu.

  • Elastyczność w tworzeniu obiektów: Przeciążanie konstruktora pozwala na inicjalizację obiektów na różne sposoby, zależnie od liczby i typu parametrów.
  • Możliwość ponownego użycia kodu: Możesz ponownie wykorzystać logikę konstruktora, wywołując jeden konstruktor z drugiego przy użyciu słowa kluczowego this().
  • Poprawiona czytelność: Przeciążone konstruktory sprawiają, że kod staje się bardziej intuicyjny, oferując konkretne opcje konstruktora dla różnych potrzeb inicjalizacji.
  • Domyślna i niestandardowa inicjalizacja: Przeciążanie konstruktora umożliwia łatwe tworzenie zarówno obiektów domyślnych, jak i inicjowanych niestandardowo.

Najczęstsze pytania

Konstruktor to specjalna metoda służąca do inicjowania nowo utworzonego obiektu i wywoływana zaraz po przydzieleniu pamięci dla obiektu. Można go użyć do inicjowania obiektów do żądanych wartości lub wartości domyślnych w momencie tworzenia obiektu. Programista nie musi pisać konstruktora dla klasy.

Jeśli dla klasy nie podano konstruktora zdefiniowanego przez użytkownika, kompilator inicjuje zmienne składowe do wartości domyślnych.

  • numeryczne typy danych są ustawione na 0
  • typy danych char są ustawione na znak null('\0')
  • zmienne referencyjne mają wartość null

  1. Ma Takie samo imię jako klasa
  2. Nie powinno zwracać wartości nawet unieważnić

1 przykład: Stwórz swojego pierwszego konstruktora w Java

Krok 1) Wpisz następujący program konstruktora Java redaktor.

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) Zapisz, uruchom i skompiluj program konstruktora w formacie Java i obserwuj wynik.

Oczekiwany wynik:

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

Rozważmy scenariusz, w którym klasa bazowa jest rozszerzana przez element podrzędny. Za każdym razem, gdy tworzony jest obiekt klasy podrzędnej, najpierw wywoływany jest konstruktor klasy nadrzędnej. To się nazywa Tworzenie łańcucha konstruktora.

3 przykład: Aby zrozumieć łączenie konstruktorów

Krok 1) Skopiuj poniższy kod do edytora.

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) Uruchom kod. Ze względu na łańcuch konstruktorów, gdy obiekt klasy podrzędnej DemoChild jest tworzony, konstruktor Demo() klasy nadrzędnej jest wywoływany jako pierwszy, a później tworzony jest konstruktor DemoChild() klasy podrzędnej.

Oczekiwany wynik:

Inside 1st Parent Constructor
Inside the Constructor of Child
Value1 === 1
Value2 === 2
Value1 === 3
Value2 === 4

Krok 3) Możesz zauważyć, że konstruktor klasy nadrzędnej Demo został nadpisany. Co się stanie, jeśli chcesz wywołać przesłonięty konstruktor Demo(int a) zamiast domyślnego konstruktora Demo() podczas tworzenia obiektu podrzędnego?

W takich przypadkach możesz użyć słowa kluczowego "Wspaniały" wywołać przesłonięte konstruktory klasy nadrzędnej.

Składnia:-

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

Przykład: Jeśli twój konstruktor jest podobny Demo (nazwa ciągu, int a), określisz Super("Java”,5). Jeśli jest używane, słowo kluczowe super musi być pierwszą linią kodu w konstruktorze klasy potomnej.

Krok 4) Odkomentuj wiersz nr 26 i uruchom kod. Obserwuj wynik.

Wyjście:

Inside 2nd Parent Constructor
Inside the Constructor of Child
Value1 === 5
Value2 === 0
Value1 === 3
Value2 === 4