Što je konstruktor u Javi i kako ga koristite?

Što je konstruktor u Javi i kako ga koristite?

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





U Javi konstruktor imenujete prema njegovoj klasi. Konstruktor je metoda definirana u klasi na koju se odnosi. Java konstruktori mogu koristiti preopterećenje kako bi osigurali alternativno ponašanje. Konstruktori u Javi također mogu koristiti nasljeđivanje za ponovnu upotrebu koda.





Zašto su vam uopće potrebni konstruktori?

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





public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}

Zatim možete stvoriti instancu ove klase i stupiti u interakciju s njom:

Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636

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



public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}

Sada pozivni kôd može koristiti setRadius metodu i ne morate brinuti o pojedinostima njegove implementacije:

kako znati tko vas je blokirao na facebooku
Circle c = new Circle();
c.setRadius(2);

Konstruktori nude još bolji način opskrbe podataka objektu kad ga stvorite. Vrlo se često koriste za inicijalizaciju svojstava, poput radius ovdje.





Primjeri jednostavnih konstruktora

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

public class Circle {
public Circle() {}
}

Vidi također: Saznajte kako stvoriti klase u Javi





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

Imajte na umu nekoliko stvari:

  1. Naziv konstruktora odgovara imenu klase.
  2. Ovaj konstruktor koristi javnost modifikator pristupa, pa ga može nazvati bilo koji drugi kôd.
  3. Konstruktor ne uključuje vrstu povratka. Za razliku od drugih metoda, konstruktori ne mogu vratiti vrijednost.

Konstruktori obično izvode neku vrstu inicijalizacije. Imajte na umu da gornji kôd ne inicijalizira vrijednost radijusa. U tom slučaju jezik će ga automatski postaviti na nulu. Ova klasa očekuje da će je korisnik koristiti setRadius () . Da biste koristili korisniju zadanu vrijednost od 0, možete je dodijeliti unutar konstruktora:

public class Circle {
public Circle() { radius = 1; }
}

Krugovi stvoreni ovom klasom barem će sada imati stvarno područje! Pozivatelj i dalje može koristiti setRadius () osigurati radijus različit od 1. No konstruktor može biti još prijateljskiji:

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

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

kako ukloniti slomljenu utičnicu za slušalice bez ljepila
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

Ovo je vrlo česta upotreba za konstruktore. Često ćete ih koristiti za inicijalizaciju varijabli na vrijednosti parametara.

Preopterećenje konstruktora

U definiciji klase možete navesti više konstruktora:

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

To daje pozivnom kodu izbor načina izgradnje objekata:

Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ', ' + c2.area()); // 12.56636, 3.14159

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

public class Circle {
public double x, y, radius;
public Circle() { radius = r; }
public Circle(double r) { radius = r; }
public Circle(double x, double y, double r) {
this.x = x; this.y = y; radius = r;
}

public double area() { return 3.14159 * radius * radius; }
}

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

Konstruktorski lanac

Što kažete na stvaranje jednog kruga, temeljenog na drugom? To bi nam dalo mogućnost lakog kopiranja Krugova. Obratite pažnju na sljedeći blok:

public Circle(Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}

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

public Circle(Circle c) {
this(c.x, c.y, c.radius);
}

Ovo je jedan oblik lančanog konstruktora koji poziva jedan konstruktor iz drugog. Koristi manje koda i pomaže u centraliziranju operacije, a ne u njezinom dupliciranju.

Pozivanje roditeljskog konstruktora

Drugi oblik lančanog konstruktora javlja se kada konstruktor pozove konstruktor svoje nadređene klase. To može biti eksplicitno ili implicitno. Da biste izričito pozvali roditeljski konstruktor, koristite super ključna riječ:

super(x, y);

Zamislite klasu Shape koja djeluje kao roditelj Kruga:

public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}

Rukuje zajedničkim pozicioniranjem za sve oblike budući da je to funkcija koju svi dijele. Sada klasa Circle može delegirati rukovanje položajem svom roditelju:

public class Circle extends Shape {
double radius;
public Circle(double r) { super(0, 0); radius = r; }
public Circle(double x, double y, double r) {
super(x, y);
radius = r;
}
}

Izgradnja superklase vrlo je važan aspekt nasljeđivanje u Javi . Jezik ga prema zadanim postavkama provodi ako ne izričito nazovete super u vašim konstruktorima.

Modifikatori pristupa na konstruktorima

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

public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}

Ovo je kompliciraniji primjer pa ga razumite:

  • Klasa nije apstraktna pa je iz nje moguće napraviti instancu.
  • Konstruktor je privatan pa samo ova klasa može stvoriti novu instancu.
  • Putem statičkog svojstva i metode, klasa izlaže jednu jedinstvenu, jedinstvenu instancu pozivateljima.

Za izradu objekata koristite konstruktore u Javi

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

U Javi konstruktori izgledaju poput drugih metoda i rade na sličan način. Trebali biste se sjetiti posebnih pravila o zadanim konstruktorima, preopterećenju i lančavanju konstruktora. Ako su vam konstruktori tek počeli, možda biste htjeli pročitati druge osnovne Java koncepte koje biste trebali naučiti pri pokretanju.

Udio Udio Cvrkut E -pošta 10 temeljnih Java koncepata koje biste trebali naučiti pri početku rada

Bez obzira pišete li GUI, razvijate softver na strani poslužitelja ili mobilnu aplikaciju koristeći Android, učenje Java će vam dobro poslužiti. 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(Objavljeno 58 članaka)

Bobby je entuzijast u tehnologiji koji je skoro dva desetljeća radio kao programer softvera. Oduševljen je igranjem igara, radi kao urednik recenzija u Switch Player Magazinu, a uronjen je u sve aspekte online izdavaštva i web razvoja.

kako napraviti gif pozadinu
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!

Kliknite ovdje za pretplatu