Preopterećenje konstruktora u Java
⚡ Pametni sažetak
Preopterećenje konstruktora u Java omogućuje klasi deklariranje više konstruktora koji se razlikuju po popisu parametara, dajući programerima fleksibilnu inicijalizaciju objekata, čišću ponovnu upotrebu koda putem this() i predvidljivo ponašanje kad god su potrebne zadane ili prilagođene vrijednosti prilikom instanciranja.
Što je preopterećenje konstruktora u Java?
Preopterećenje konstruktora u Java je tehnika u kojoj klasa deklarira više konstruktora koji se razlikuju u popisu parametara. Kompajler razlikuje ove konstruktore analizirajući broj parametara i njihove tipove podataka.
Primjeri valjanih konstruktora za klasu Korisnički račun prikazani su u nastavku:
Account(int a); Account (int a,int b); Account (String a,int b);
Zašto nam je potrebno preopterećenje konstruktora u Java?
Preopterećenje konstruktora u Java poboljšava fleksibilnost i učinkovitost koda dopuštajući nekoliko konstruktora u klasi, svaki s drugačijim popisom parametara.
- Fleksibilnost u stvaranju objekata: Preopterećenje konstruktora omogućuje inicijalizaciju objekata na različite načine, ovisno o broju ili vrsti parametara.
- Code Ponovno korištenje: Logiku konstruktora možete ponovno koristiti pozivanjem jednog konstruktora iz drugog pomoću ovaj() ključne riječi.
- Poboljšana čitljivost: Preopterećeni konstruktori čine kod intuitivnijim nudeći specifične opcije za različite potrebe inicijalizacije.
- Zadana i prilagođena inicijalizacija: Preopterećenje konstruktora omogućuje vam jednostavno stvaranje i zadanih i prilagođeno inicijaliziranih objekata.
Primjer: Preopterećenje konstruktora u Java
Sljedeći primjer demonstrira preopterećenje konstruktora u Java koristeći klasu pod nazivom Demo.
Korak 1) Upišite kod u uređivač.
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(); } }
Korak 2) Spremi, kompajliraj i pokreni kod.
Korak 3) Pojavljuje se greška. Pokušajte otkloniti pogrešku prije nego što prijeđete na sljedeći korak preopterećenja konstruktora u Java.
Korak 4) Svaka klasa ima zadanu vrijednost Konstruktor u JavaZadani konstruktor za klasa Demo is Demo()Ako ga ne navedete, kompajler će ga stvoriti za vas i inicijalizirati varijable na zadane vrijednosti.
Međutim, ako odredite parametrizirani konstruktor poput Demo(int a) i želite koristiti zadanu vrijednost Demo(), obavezno ga je eksplicitno deklarirati.
Korak 5) Odkomentirajte retke 4-8 koda, zatim spremite, kompajlirajte i ponovno pokrenite program kako biste uočili promjenu u ponašanju.
Ulančavanje konstruktora Java
Razmotrite scenarij u kojem osnovnu klasu proširuje dijete. Kad god se kreira objekt podređene klase, prvo se poziva konstruktor roditeljske klase. Ovo se zove Ulančavanje konstruktora.
Primjer: Razumijevanje ulančavanja konstruktora s preopterećenjem konstruktora u Java
Korak 1) Kopirajte sljedeći kod u editor.
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); } }
Korak 2) Pokrenite kod. Zbog ulančavanja konstruktora, kada objekt podređene klase DemoDjete je stvoren, konstruktor Demo() roditeljske klase se prvo poziva, a zatim konstruktor DemoDjete() djeteta trči dalje.
Očekivani rezultat:
Inside 1st Parent Constructor Inside the Constructor of Child Value1 === 1 Value2 === 2 Value1 === 3 Value2 === 4
Korak 3) Možete primijetiti da roditeljski konstruktor Demo() pokreće se prema zadanim postavkama. Za pozivanje preopterećenog konstruktora Demo(int a) umjesto toga koristite ključnu riječ "super".
Sintaksa:
super(); --or-- super(parameter list);
Primjer: Ako je vaš roditeljski konstruktor ovakav Demo(Naziv niza, int a), precizirat ćete super("Java”,5). Ako se koristi, ključna riječ super mora biti prvi redak koda u konstruktoru podređene klase.
Korak 4) Odkomentirajte redak 26 i pokrenite kod. Promatrajte izlaz.
Izlaz:
Inside 2nd Parent Constructor Inside the Constructor of Child Value1 === 5 Value2 === 0 Value1 === 3 Value2 === 4

