În programarea orientată obiect, un constructor este o funcție specială pe care o apelați pentru a crea un obiect. Constructorii au mai multe caracteristici unice care le permit să funcționeze.
În Java, denumiți un constructor după clasa sa. Un constructor este o metodă, definită în clasa căreia i se aplică. Constructorii Java pot folosi supraîncărcarea pentru a oferi un comportament alternativ. Constructorii din Java pot folosi, de asemenea, moștenirea pentru a refolosi codul.
De ce ai nevoie de constructori?
Constructorii sunt un pilon programare orientată obiect, iar Java nu face excepție. Acest exemplu arată cum puteți defini o clasă de bază Circle cu o proprietate de date și o metodă:
Cerc de clasă publică {
raza dubla publica;
public double area () {return 3.14159 * raza * raza; }
}
Apoi puteți crea o instanță a acestei clase și să interacționați cu aceasta:
Cerc c = Cerc nou ();
c.radius = 2;
System.out.println (c.area ()); // 12.56636
Dar acest lucru este mai puțin convenabil și robust decât ar putea fi. Este o bună practică orientată obiect să încapsulați datele, protejându-le de accesul neautorizat:
Cerc de clasă publică {
privat raza dubla;
public double area () {return 3.14159 * raza * raza; }
public void setRadius (dublu r) {radius = r; }
}
Acum, codul de apel poate utiliza setRadius metoda și nu trebuie să vă faceți griji cu privire la detaliile sale de implementare:
Cerc c = Cerc nou ();
c.setRadius (2);
Constructorii oferă un mod și mai bun de a furniza date unui obiect atunci când îl creați. Ele sunt foarte des utilizate pentru inițializarea proprietăților, cum ar fi rază Aici.
Exemple de constructori simpli
Cel mai de bază constructor este unul fără argumente, care nu face nimic:
Cerc de clasă publică {
cerc public () {}
}
Vezi si: Aflați cum să creați cursuri în Java
Dacă nu definiți un constructor, Java va furniza unul implicit care se comportă în același mod.
Rețineți câteva lucruri:
- Numele constructorului se potrivește cu numele clasei.
- Acest constructor folosește public modificator de acces, astfel încât orice alt cod îl poate apela.
- Un constructor nu include un tip de returnare. Spre deosebire de alte metode, constructorii nu pot returna o valoare.
Constructorii efectuează de obicei un fel de inițializare. Rețineți că codul de mai sus nu inițializează valoarea razei. În acest caz, limba îl va seta automat la zero. Această clasă se așteaptă ca un utilizator să o folosească setRadius (). Pentru a utiliza o valoare implicită mai utilă decât 0, o puteți atribui în cadrul constructorului:
Cerc de clasă publică {
Cerc public () {raza = 1; }
}
Cercurile create cu această clasă vor avea cel puțin acum o zonă reală! Apelantul poate utiliza în continuare setRadius () pentru a furniza o rază diferită de 1. Dar constructorul poate fi și mai prietenos:
Cerc de clasă publică {
Cerc public (dublu r) {raza = r; }
}
Acum puteți crea cercuri cu o anumită rază chiar de la naștere:
Cerc c = Cerc nou (2);
System.out.println (c.area ()); // 12.56636
Aceasta este o utilizare foarte comună pentru constructori. Le veți folosi adesea pentru a inițializa variabilele la valorile parametrilor.
Supraîncărcarea constructorului
Puteți specifica mai multe constructori într-o definiție de clasă:
Cerc public () {raza = 1; }
Cerc public (dublu r) {raza = r; }
Acest lucru oferă codului apelant o alegere a modului de construire a obiectelor:
Cercul c1 = Cerc nou (2);
Cerc c2 = Cerc nou ();
System.out.println (c1.area () + "," + c2.area ()); // 12.56636, 3.14159
Cu un cerc puțin mai complex, puteți explora constructori mai interesanți. Această versiune își stochează poziția:
Cerc de clasă publică {
dublu public X y, rază;
Cerc public () {raza = r; }
Cerc public (dublu r) {raza = r; }
Cerc public (dublu x, dublu y, dublu r) {
this.x = x; this.y = y; raza = r;
}
public double area () {return 3.14159 * raza * raza; }
}
Acum puteți crea un cerc fără argumente, o singură rază sau coordonatele x și y alături de rază. Acesta este același tip de supraîncărcare pe care îl acceptă Java pentru orice metodă.
Înlănțuirea constructorului
Ce zici de crearea unui cerc, bazat pe altul? Acest lucru ne-ar oferi posibilitatea de a copia cu ușurință cercurile. Respectați următorul bloc:
Cerc public (Cercul c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}
Acest lucru va funcționa, dar repetă un cod inutil. Deoarece clasa Circle are deja un constructor care gestionează proprietățile individuale, îl puteți apela folosind acest cuvânt cheie:
Cerc public (Cercul c) {
aceasta (c.x, c.y, c.radius);
}
Aceasta este o formă de înlănțuire a constructorului, care numește un constructor de la altul. Folosește mai puțin cod și ajută la centralizarea unei operații, mai degrabă decât la duplicarea ei.
Apelarea constructorului părinte
Cealaltă formă de înlănțuire a constructorului apare atunci când un constructor numește un constructor din clasa sa părinte. Acest lucru poate fi explicit sau implicit. Pentru a apela în mod explicit un constructor părinte, utilizați super cuvânt cheie:
super (x, y);
Imaginați-vă o clasă Shape care acționează ca părinte al cercului:
public class Shape {
dublu x, y;
public Shape (double _x, double _y) {x = _x; y = _y; }
}
Se ocupă de poziționarea comună pentru toate formele, deoarece aceasta este o funcționalitate pe care o împărtășesc toți. Acum, clasa Circle poate delega gestionarea poziției părintelui său:
Cercul de clasă publică extinde Forma {
raza dubla;
Cerc public (dublu r) {super (0, 0); raza = r; }
Cerc public (dublu x, dublu y, dublu r) {
super (x, y);
raza = r;
}
}
Construcția superclasei este un aspect foarte important al moștenirea în Java. Limba îl aplică în mod prestabilit dacă nu apelați în mod explicit super în constructorii tăi.
Modificatori de acces pe constructori
Constructorii pot include un modificator de acces în semnătura lor. La fel ca alte metode, aceasta definește tipurile de apelant care pot accesa constructorul:
public class Test {
Private static Test uniqueInstance = test nou ();
test privat () {}
public static Test getInstance () {
returnează Instanță unică;
}
}
Acesta este un exemplu mai complicat, așa că aveți grijă să îl înțelegeți:
- Clasa nu este abstractă, deci este posibil să se instanțeze din ea.
- Constructorul este privat, deci numai această clasă în sine poate crea o nouă instanță.
- Printr-o proprietate statică și o metodă, clasa expune apelanților o singură instanță unică de la sine.
Utilizați constructori în Java pentru a crea obiecte
Constructorii sunt vitali pentru programarea orientată pe obiecte. Acestea vă permit să creați obiecte, ceea ce este esențial!
În Java, constructorii arată ca alte metode și funcționează în același mod. Ar trebui să vă amintiți regulile speciale referitoare la constructorii impliciți, supraîncărcarea și înlănțuirea constructorilor. Dacă constructorii sunt noi pentru dvs., vă recomandăm să citiți celelalte concepte Java de bază pe care ar trebui să le învățați atunci când începeți.
Indiferent dacă scrieți o interfață grafică, dezvoltați software pentru server sau o aplicație mobilă utilizând Android, învățarea Java vă va servi bine. Iată câteva concepte Java de bază pentru a vă ajuta să începeți.
Citiți în continuare
- Programare
- Java
- Sfaturi de codificare

Bobby este un pasionat de tehnologie care a lucrat ca dezvoltator de software timp de aproape două decenii. Este pasionat de jocuri, lucrează ca editor de recenzii la Switch Player Magazine și este cufundat în toate aspectele publicării online și dezvoltării web.
Aboneaza-te la newsletter-ul nostru
Alăturați-vă newsletter-ului pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!
Încă un pas…!
Vă rugăm să confirmați adresa de e-mail în e-mailul pe care tocmai vi l-am trimis.