V objektovo orientovanom programovaní je konštruktor špeciálna funkcia, ktorú voláte na vytvorenie objektu. Konštruktéri majú niekoľko jedinečných funkcií, ktoré im umožňujú pracovať.

V Jave pomenujete konštruktor po svojej triede. Konštruktor je metóda definovaná v triede, na ktorú sa vzťahuje. Konštruktéri Java môžu na zaistenie alternatívneho správania použiť preťaženie. Konštruktéri v Jave môžu tiež využiť dedičstvo na opakované použitie kódu.

Prečo vlastne potrebujete konštruktérov?

Konštruktéri sú oporou objektovo orientované programovaniea Java nie je výnimkou. Tento príklad ukazuje, ako môžete definovať základnú triedu Circle s jednou vlastnosťou údajov a jednou metódou:

kruh verejnej triedy {
verejný dvojitý polomer;
verejná dvojitá oblasť () {návrat 3,14159 * polomer * polomer; }
}

Potom môžete vytvoriť inštanciu tejto triedy a pracovať s ňou:

Kruh c = nový kruh ();
c.radius = 2;
System.out.println (c.area ()); // 12.56636

Ale je to menej pohodlné a robustné, ako by to mohlo byť. Je dobrým objektovo orientovaným postupom zapuzdrovať údaje, ktoré ich chránia pred neoprávneným prístupom:

instagram viewer

kruh verejnej triedy {
súkromné dvojitý polomer;
verejná dvojitá oblasť () {návrat 3,14159 * polomer * polomer; }
public void setRadius (double r) {radius = r; }
}

Teraz môže volací kód používať setRadius metódu a nemusíte sa starať o jej implementačné podrobnosti:

Kruh c = nový kruh ();
c.setRadius (2);

Konštruktéri ponúkajú ešte lepší spôsob poskytovania údajov objektu, keď ho vytvoríte. Veľmi často sa používajú na inicializáciu vlastností, napríklad polomer tu.

Príklady jednoduchých konštruktorov

Najzákladnejším konštruktorom je jeden bez argumentov, ktorý nerobí nič:

kruh verejnej triedy {
verejny kruh () {}
}

Pozri tiež: Naučte sa, ako vytvárať triedy v Jave

Ak nedefinujete konštruktor, Java poskytne predvolený, ktorý sa chová rovnako.

Všimnite si pár vecí:

  1. Názov konštruktora sa zhoduje s názvom triedy.
  2. Tento konštruktor používa verejné modifikátor prístupu, aby ho mohol volať akýkoľvek iný kód.
  3. Konštruktor nezahŕňa návratový typ. Na rozdiel od iných metód nemôžu konštruktory vrátiť hodnotu.

Konštruktéri zvyčajne vykonávajú nejaký druh inicializácie. Uvedomte si, že vyššie uvedený kód neinicializuje hodnotu polomeru. V takom prípade ho jazyk automaticky nastaví na nulu. Táto trieda očakáva, že ju bude používateľ používať setRadius (). Ak chcete použiť užitočnejšiu predvolenú hodnotu ako 0, môžete ju priradiť v rámci konštruktora:

kruh verejnej triedy {
public Circle () {radius = 1; }
}

Kruhy vytvorené pomocou tejto triedy budú mať aspoň teraz skutočnú oblasť! Volajúci môže naďalej používať setRadius () poskytnúť iný polomer ako 1. Ale konštruktér môže byť ešte prívetivejší:

kruh verejnej triedy {
public Circle (double r) {radius = r; }
}

Teraz môžete vytvárať kruhy so špecifickým polomerom hneď od narodenia:

Kruh c = nový kruh (2);
System.out.println (c.area ()); // 12.56636

Toto je veľmi bežné použitie pre konštruktérov. Často ich použijete na inicializáciu premenných na hodnoty parametrov.

Preťaženie konštruktéra

V definícii triedy môžete určiť viac ako jedného konštruktora:

public Circle () {radius = 1; }
public Circle (double r) {radius = r; }

Toto dáva volajúcemu kódu možnosť výberu, ako konštruovať objekty:

Kruh c1 = nový kruh (2);
Kruh c2 = nový kruh ();
System.out.println (c1.area () + "," + c2.area ()); // 12.56636, 3.14159

S trochu zložitejším kruhom môžete preskúmať zaujímavejších konštruktérov. Táto verzia ukladá svoju pozíciu:

kruh verejnej triedy {
verejná dvojka x, y, polomer;
public Circle () {radius = r; }
public Circle (double r) {radius = r; }
public Circle (double x, double y, double r) {
this.x = x; this.y = y; polomer = r;
}

verejná dvojitá oblasť () {návrat 3,14159 * polomer * polomer; }
}

Teraz môžete vytvoriť kruh bez argumentov, jedného polomeru alebo súradníc x a y pozdĺž tohto polomeru. Jedná sa o rovnaký druh preťaženia, aký Java podporuje pre každú metódu.

Reťazenie konštruktérov

Čo tak vytvoriť jeden kruh na základe druhého? Takto by sme mohli ľahko kopírovať kruhy. Dodržujte nasledujúci blok:

verejný kruh (kruh c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}

Bude to fungovať, ale zbytočne to opakuje nejaký kód. Pretože trieda Circle už má konštruktor, ktorý spracováva jednotlivé vlastnosti, môžete ich namiesto toho zavolať pomocou toto kľúčové slovo:

verejný kruh (kruh c) {
this (c.x, c.y, c.radius);
}

Toto je jedna forma reťazenia konštruktorov, ktorá volá jedného konštruktéra od druhého. Používa menej kódu a pomáha skôr centralizovať operáciu ako ju duplikovať.

Volanie materského konštruktéra

Iná forma reťazenia konštruktorov nastáva, keď konštruktér zavolá konštruktor svojej nadradenej triedy. Môže to byť explicitné alebo implicitné. Ak chcete explicitne zavolať nadradeného konštruktora, použite Super kľúčové slovo:

super (x, y);

Predstavte si, že trieda Tvar pôsobí ako rodič Kruhu:

verejná trieda Tvar {
dvojité x, y;
verejný tvar (double _x, double _y) {x = _x; y = _y; }
}

Zaoberá sa spoločným určovaním pozícií pre všetky tvary, pretože to je funkcia, ktorú všetci zdieľajú. Teraz môže trieda Circle delegovať manipuláciu s pozíciou na svojho rodiča:

verejná trieda Kruh rozširuje tvar {
dvojitý polomer;
public Circle (double r) {super (0, 0); polomer = r; }
public Circle (double x, double y, double r) {
super (x, y);
polomer = r;
}
}

Konštrukcia nadtriedy je veľmi dôležitým aspektom dedenie v Jave. Ak telefonujete výslovne, jazyk ho predvolene vynucuje Super vo vašich konštruktéroch.

Modifikátory prístupu na konštruktéroch

Konštruktéri môžu do svojho podpisu zahrnúť modifikátor prístupu. Rovnako ako iné metódy, aj toto definuje, ktoré typy volajúceho majú prístup ku konštruktoru:

test verejnej triedy {
súkromný statický test uniqueInstance = nový Test ();
súkromný test () {}
verejný statický test getInstance () {
vrátiť uniqueInstance;
}
}

Toto je komplikovanejší príklad, takže ho pochopte:

  • Trieda nie je abstraktná, takže je možné z nej vytvoriť inštanciu.
  • Konštruktor je súkromný, takže iba táto trieda sama môže vytvoriť novú inštanciu.
  • Prostredníctvom statickej vlastnosti a metódy trieda vystavuje volajúcim jednu svoju jedinečnú inštanciu.

Na vytváranie objektov používajte konštruktéry v Jave

Konštruktory sú pre objektovo orientované programovanie nevyhnutné. Umožňujú vám vytvárať objekty, čo je nevyhnutné!

V Jave vyzerajú konštruktory ako iné metódy a fungujú rovnakým spôsobom. Mali by ste pamätať na špeciálne pravidlá týkajúce sa predvolených konštruktorov, preťaženia a reťazenia konštruktorov. Ak sú pre vás konštruktéri noví, možno by ste si mali prečítať ďalšie základné koncepty jazyka Java, ktoré by ste sa mali pri začiatkoch naučiť.

Email
10 základných konceptov Java, ktoré by ste sa mali naučiť, keď začnete

Či už píšete grafické používateľské rozhranie, vyvíjate softvér na strane servera alebo mobilnú aplikáciu pomocou systému Android, učenie sa Java vám dobre poslúži. Tu je niekoľko základných pojmov Java, ktoré vám pomôžu začať.

Prečítajte si Ďalej

Súvisiace témy
  • Programovanie
  • Java
  • Tipy na kódovanie
O autorovi
Bobby Jack (Publikovaných 51 článkov)

Bobby je technologický nadšenec, ktorý takmer dve desaťročia pracoval ako vývojár softvéru. Je vášnivým hrám, pracuje ako redaktor recenzií v magazíne Switch Player Magazine a je ponorený do všetkých aspektov online publikovania a vývoja webu.

Viac od Bobbyho Jacka

Prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu s technickými tipmi, recenziami, bezplatnými elektronickými knihami a exkluzívnymi ponukami!

Ešte jeden krok…!

V e-maile, ktorý sme vám práve poslali, potvrďte svoju e-mailovú adresu.

.