U objektno orijentiranom programiranju, konstruktor je posebna funkcija koju pozivate za stvaranje objekta. Konstruktori imaju nekoliko jedinstvenih značajki koje im omogućavaju rad.

U Javi imenujete konstruktor po njegovoj klasi. Konstruktor je metoda definirana u klasi na koju se odnosi. Java konstruktori mogu koristiti preopterećenje za pružanje alternativnog ponašanja. Konstruktori u Javi također mogu koristiti nasljeđivanje za ponovnu upotrebu koda.

Zašto vam uopće trebaju konstruktori?

Konstruktori su oslonac za objektno orijentirano programiranje, a Java nije iznimka. Ovaj primjer pokazuje kako možete definirati osnovnu klasu Circle s jednim svojstvom podataka i jednom metodom:

javni klasni krug {
javni dvostruki radijus;
javno dvostruko područje () {povratak 3,14159 * radijus * radijus; }
}

Zatim možete stvoriti instancu ove klase i komunicirati s njom:

Krug c = novi krug ();
c.radijus = 2;
System.out.println (c.area ()); // 12.56636

Ali ovo je manje prikladno i robusnije nego što bi moglo biti. Dobra je objektno orijentirana praksa inkapsulirati podatke, štiteći ih od neovlaštenog pristupa:

instagram viewer

javni klasni krug {
privatni dvostruki radijus;
javno dvostruko područje () {povratak 3,14159 * radijus * radijus; }
javna praznina setRadius (dvostruko r) {radijus = r; }
}

Sada pozivni kod može koristiti setRadius metodu i ne morate brinuti o detaljima njezine implementacije:

Krug c = novi krug ();
c.setRadius (2);

Konstruktori nude još bolji način dostavljanja podataka do objekta kada ga kreirate. Oni se vrlo često koriste za inicijalizaciju svojstava, kao što je radius ovdje.

Primjeri jednostavnih konstruktora

Najosnovniji konstruktor je onaj bez argumenata, koji ne čini ništa:

javni klasni krug {
javni krug () {}
}

Vidi također: Naučite kako stvoriti nastavu na Javi

Ako ne definirate konstruktor, Java će pružiti zadani koji se ponaša na isti način.

Zabilježite nekoliko stvari:

  1. Ime konstruktora odgovara nazivu klase.
  2. Ovaj konstruktor koristi javnost modifikator pristupa, tako da ga može pozvati bilo koji drugi kod.
  3. Konstruktor ne uključuje povratni tip. Za razliku od ostalih metoda, konstruktori ne mogu vratiti vrijednost.

Konstruktori obično provode neku vrstu inicijalizacije. Imajte na umu da gornji kod ne inicijalizira vrijednost radijusa. U tom će ga slučaju jezik automatski postaviti na nulu. Ova klasa očekuje od korisnika setRadius (). Da biste koristili korisnije zadano od 0, možete ga dodijeliti unutar konstruktora:

javni klasni krug {
javni krug () {radijus = 1; }
}

Krugovi stvoreni s ovom klasom barem će sada imati stvarno područje! Pozivatelj i dalje može koristiti setRadius () za pružanje radijusa različitog od 1. Ali konstruktor može biti još prijateljskiji:

javni klasni krug {
javni krug (dvostruki r) {radijus = r; }
}

Sada možete stvarati krugove s određenim radijusom odmah od rođenja:

Krug c = novi krug (2);
System.out.println (c.area ()); // 12.56636

Ovo je vrlo uobičajena upotreba za konstruktore. Često ćete ih koristiti za inicijalizaciju varijabli u vrijednosti parametara.

Preopterećenje konstruktora

Možete odrediti više od jednog konstruktora u definiciji klase:

javni krug () {radijus = 1; }
javni krug (dvostruki r) {radijus = r; }

To daje pozivnom kodu izbor načina konstruiranja objekata:

Krug c1 = novi krug (2);
Krug c2 = novi krug ();
System.out.println (c1.area () + "," + c2.area ()); // 12.56636, 3.14159

S malo složenijim Circleom možete istražiti zanimljivije konstruktore. Ova verzija čuva svoj položaj:

javni klasni krug {
javni dvojnik x, y, radius;
javni krug () {radijus = r; }
javni krug (dvostruki r) {radijus = r; }
javni krug (dvostruki x, dvostruki y, dvostruki r) {
ovo.x = x; ovo.y = y; polumjer = r;
}

javno dvostruko područje () {povratak 3,14159 * radijus * radijus; }
}

Sada možete stvoriti krug bez argumenata, jednog radijusa ili x i y koordinata uz radijus. Ovo je ista vrsta preopterećenja koju Java podržava za bilo koju metodu.

Lanac konstruktora

Što kažete na stvaranje jednog kruga na temelju drugog? To bi nam omogućilo lako kopiranje krugova. Pridržavajte se sljedećeg bloka:

javni krug (krug c) {
ovo.x = c.x;
ovo.y = c.y;
this.radius = c.radius;
}

To će uspjeti, ali nepotrebno ponavlja neki kod. Budući da klasa Circle već ima konstruktor koji obrađuje pojedinačna svojstva, to možete umjesto toga nazvati pomoću ovaj ključna riječ:

javni krug (krug c) {
ovo (c.x, c.y, c.radius);
}

Ovo je jedan oblik ulančavanja konstruktora, koji poziva jedan konstruktor iz drugog. Koristi manje koda i pomaže centralizirati operaciju, umjesto da je duplicira.

Pozivanje roditeljskog konstruktora

Drugi oblik ulančavanja konstruktora događa se kada konstruktor pozove konstruktor svoje roditeljske klase. To može biti eksplicitno ili implicitno. Da biste eksplicitno pozvali nadređeni konstruktor, upotrijebite super ključna riječ:

super (x, y);

Zamislite razred Shape koji djeluje kao roditelj Kruga:

oblik javne klase {
dvostruki x, y;
javni oblik (double _x, double _y) {x = _x; y = _y; }
}

Obrađuje uobičajeno pozicioniranje za sve oblike, jer je to funkcionalnost koju svi dijele. Klasa Circle sada može roditelju dodijeliti upravljanje položajem:

javni klasni krug produžuje Oblik {
dvostruki radijus;
javni krug (dvostruki r) {super (0, 0); polumjer = r; }
javni krug (dvostruki x, dvostruki y, dvostruki r) {
super (x, y);
polumjer = r;
}
}

Izgradnja superklase vrlo je važan aspekt nasljedstvo u Javi. Jezik ga primjenjuje prema zadanim postavkama ako izričito ne pozovete super u vašim konstruktorima.

Modifikatori pristupa na konstruktorima

Konstruktori mogu u svoj potpis uključiti modifikator pristupa. Kao i druge metode, ovo definira koje vrste pozivatelja mogu pristupiti konstruktoru:

test javne klase {
privatni statički test uniqueInstance = novi test ();
privatni test () {}
javni statički test getInstance () {
return uniqueInstance;
}
}

Ovo je složeniji primjer, pa pripazite da ga razumijete:

  • Klasa nije apstraktna, pa je iz nje moguće izvesti primjer.
  • Konstruktor je privatan pa samo ova klasa sama može stvoriti novu instancu.
  • Kroz statičko svojstvo i metodu klasa pozivateljima izlaže jednu, jedinstvenu instancu.

Koristite konstruktore u Javi za stvaranje objekata

Konstruktori su vitalni za objektno orijentirano programiranje. Omogućuju vam stvaranje predmeta, što je bitno!

U Javi konstruktori izgledaju poput drugih metoda i rade na približno isti način. Trebali biste se sjetiti posebnih pravila oko zadanih konstruktora, preopterećenja i ulančavanja konstruktora. Ako su vam konstruktori novi, možda ćete htjeti pročitati ostale temeljne Java koncepte koje biste trebali naučiti prilikom početka.

E-mail
10 temeljnih koncepata Java koje biste trebali naučiti kad započnete

Bilo da pišete GUI, razvijate softver na poslužitelju ili mobilnu aplikaciju pomoću Androida, učenje Java poslužit će vam dobro. Evo nekoliko osnovnih Java koncepata koji će vam pomoći da započnete.

Pročitajte Dalje

Povezane teme
  • Programiranje
  • Java
  • Savjeti za kodiranje
O autoru
Bobby Jack (Objavljen 51 članak)

Bobby je tehnološki entuzijast koji je većinu dva desetljeća radio kao programer softvera. Zaljubljen je u igre na sreću, radeći kao urednik recenzija u časopisu Switch Player, i uronjen je u sve aspekte internetskog izdavanja i web razvoja.

Više od Bobbyja Jacka

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e-knjige i ekskluzivne ponude!

Još jedan korak…!

Potvrdite svoju e-adresu u e-pošti koju smo vam upravo poslali.

.