Moștenirea este unul dintre conceptele de bază ale programării orientate pe obiecte. În programare, cuvântul moștenire reprezintă o relație în care o clasă copil își asumă starea și comportamentul unei clase părinte.
Scopul moștenirii în dezvoltarea de software este de a facilita refolosirea unui software sigur și fiabil. Unul dintre avantajele majore ale utilizării moștenirii este că elimină codul redundant din programele dvs.
Cum funcționează moștenirea
Ideea din spatele moștenirii este că multe clase sau obiecte au unele din același set de atribute și metode. Prin urmare, în spiritul producerii unui software de încredere, noi clase pot fi acum extrase din clasele conexe preexistente și, dacă este necesar, se extind asupra stărilor și comportamentelor existente.
Un exemplu din lumea reală a modului în care funcționează moștenirea ar fi luarea în considerare a fructelor. Aceasta este o etichetă largă care servește la încapsularea unei game de articole diferite.
Un măr este un fruct și la fel este și portocala. Cu toate acestea, o portocală nu este un măr, așa că nu ați avea fructe ca unul dintre articolele din stoc dacă ați deține un magazin. Poate că ați putea avea o secțiune de fructe în inventar și, în secțiunea respectivă, ați avea articole mai specifice, cum ar fi mere și portocale.
Așa funcționează moștenirea.
Utilizarea moștenirii în Java
Moștenirea poate fi utilizată în orice limbaj de programare care utilizează paradigmă de programare orientată obiect. Cu toate acestea, modul exact în care este utilizată moștenirea depinde de limbajul de programare specific.
De exemplu, C ++ este, de asemenea, un limbaj de programare orientat pe obiecte. C ++ acceptă ceea ce este cunoscut sub numele de moștenire multiplă, în timp ce Java acceptă doar moștenirea unică.
Ceea ce înseamnă acest lucru este că, în Java, o clasă părinte poate avea mai multe clase copil, dar fiecare clasă copil poate avea doar o singură clasă părinte (moștenire unică). Cu toate acestea, există o modalitate de a realiza moștenirea multiplă indirectă în Java, prin crearea unei relații de bunici, părinți și copii.
Crearea clasei părinte în Java
Procesul de selectare a unei clase părinte dintr-un document de cerințe software este cunoscut sub numele de analiză orientată obiect. În timpul acestui proces, sintagma „este a” este adesea utilizată pentru a identifica posibile relații de moștenire. Pornind din exemplul nostru de mai sus, ar trebui să puteți vedea că fructele ar fi clasa noastră părinte.
Exemplu de clasă de fructe părinte
public class Fruit {
// Declarație variabilă
sămânță de șir protejat;
String skin skinColor;
gust String protejat;
// Constructor implicit
public Fruit () {
sămânță = "";
skinColor = "";
gust = "";
}
// Constructor primar
public Fruit (String seed, String skinColor, String gust) {
this.seed = sămânță;
this.skinColor = skinColor;
this.taste = gust;
}
// getters și seters
public String getSeed () {
returnează sămânța;
}
public void setSeed (String seed) {
this.seed = sămânță;
}
public String getSkinColor () {
returnează pieleaCuloare;
}
public void setSkinColor (String skinColor) {
this.skinColor = skinColor;
}
public String getTaste () {
gust de întoarcere;
}
public void setTaste (String gust) {
this.taste = gust;
}
// metoda mananca
public void eat () {
// cod general despre cum să mănânci un fruct
}
// metoda sucului
public vid juice () {
// cod general privind modul de suc al unui fruct
}
}
Unul dintre cele mai notabile aspecte ale clasei părinte de mai sus este modificatorul de acces care este utilizat cu fiecare declarație de variabilă. Modificatorul de acces „protejat” este ideal pentru utilizare în clasele părinte, deoarece împiedică clasele non-copil să aibă acces la atributele de date ale clasei părinte.
Mai jos, în cod, sunteți introdus la constructori, getters și setatori care sunt blocuri generale pentru orice clasă Java. În cele din urmă, vi se prezintă două metode (suc și mâncare) care sunt create în clasa părinte a programului nostru, deoarece acestea sunt universale pentru toate fructele - toate fructele pot fi consumate și sucate.
Crearea de clase pentru copii în Java
Clasele pentru copii sunt denumite de obicei clase specializate sau derivate deoarece moștenesc starea și comportamentul de la un părinte și adesea personalizează aceste atribute pentru a fi mai specifice.
Continuând cu exemplul nostru, ar trebui să puteți vedea de ce portocala ar fi o clasă adecvată pentru copii din clasa de fructe de mai sus.
Exemplu de clasă Orange Child
public class Orange extinde Fruit {
// declarație variabilă
supreme private int;
// constructor implicit
public Orange () {
supreme = 0;
}
// constructor primar
public Portocaliu (String seed, String skinColor, String gust, int supreme) {
super (sămânță, pieleCuloare, gust);
this.supremes = supreme;
}
// getters și seters
public int getsupremes () {
returnează supreme;
}
public void setsupremes (int supremes) {
this.supremes = supreme;
}
// metoda mananca
public void eat () {
// cum se mănâncă o portocală
}
// metoda sucului
public vid juice () {
// cum să faci suc și portocală
}
// metoda peel
public void peel () {
// cum se curăță o portocală
}
}
Există o diferență între cum arată o declarație obișnuită de clasă Java și ceea ce avem în codul nostru de mai sus. Cuvântul cheie „extinde” este ceea ce este utilizat în Java pentru a face posibilă moștenirea.
În exemplul nostru de mai sus, clasa copil (portocaliu) extinde clasa părinte (fruct). Prin urmare, starea și comportamentul clasei de fructe pot fi acum accesate și modificate de clasa portocalie.
Atributul unic pe care îl are clasa noastră portocalie este identificat cu supremele variabilei (care este numele oficial pentru micile segmente găsite în portocale). Aici intră în joc specializarea; nu toate fructele au supreme, dar toate portocalele, deci rezervarea variabilei supreme pentru clasa portocalie este logică.
Adăugarea metodei „coajă” la metodele preexistente „mănâncă” și „suc” este, de asemenea, logică, deoarece, deși nu toate fructele pot fi decojite, portocalele sunt deseori decojite.
Trebuie să rețineți că, dacă nu am intenționa să modificăm metodele existente de „mâncare” și „suc”, nu ar fi nevoie să le includem în clasa noastră portocalie. Metodele din clasa portocalie anulează orice metodă similară din clasa fructelor. Așadar, dacă toate fructele ar fi consumate și sucate în același mod, nu ar fi nevoie să creăm aceste metode în clasa portocalie.
Constructorii de rol joacă în moștenire
În mod implicit, constructorii clasei părinte sunt moștenite de clasele copil. Prin urmare, dacă se creează un obiect de clasă copil, aceasta înseamnă că un obiect de clasă părinte este creat și automat.
Revenind la exemplul nostru, de fiecare dată când este creat un nou obiect portocaliu, se creează și un obiect de fructe, deoarece o portocală este un fruct.
În culise, când este creat un obiect de clasă copil, constructorul clasei părinte este numit mai întâi urmat de constructorul clasei copil. În clasa noastră copil portocaliu de mai sus, dacă se creează un obiect portocaliu fără parametri, va fi apelat constructorul nostru implicit de clasă de fructe, urmat de contractorul nostru implicit de clasă portocaliu.
Metoda „super” din constructorul nostru principal de mai sus este necesară deoarece specifică faptul că constructorul primar - și nu constructorul implicit - al clasei de fructe părinte ar trebui să fie apelat ori de câte ori este un obiect portocaliu cu parametri creată.
Acum puteți utiliza moștenirea în Java
Din acest articol, ați putut afla ce este moștenirea, cum funcționează și de ce este un concept atât de important în programare. Acum puteți crea relațiile de moștenire utilizând limbajul de programare Java. Mai mult, acum știi cum să ocolești regula de moștenire unică a Java, creând o relație de bunici.
Credit de imagine: Andreas Wohlfahrt /Pexels
Obținerea corectă a programării orientate pe obiecte înseamnă că trebuie să știți despre moștenire și cum poate simplifica codificarea și reduce erorile.
Citiți în continuare
- Programare
- Java
- Programare orientată pe obiecte
Kadeisha Kean este un dezvoltator de software complet și scriitor tehnic / tehnologic. Are abilitatea distinctă de a simplifica unele dintre cele mai complexe concepte tehnologice; producând materiale care pot fi înțelese cu ușurință de orice novice în tehnologie. Este pasionată de scriere, dezvoltarea de software-uri interesante și călătoria prin lume (prin documentare).
Aboneaza-te la newsletter-ul nostru
Alăturați-vă newsletterului 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.