CATEGORII DOCUMENTE |
Dupa incapsularea datelor, este al doilea principiu de baza al programarii orientate pe obiecte. Mostenirea este folositoare deoarece reduce rescrierea codului. Adica, o clasa poate fi mostenita de catre o alta clasa (toate caracteristicile primei clase se regasesc si in a doua clasa). Noua clasa isi poate modifica o parte din comportament, poate adauga ceva nou sau poate ignora ceea ce este neinteresant. Aceasta idee provine din lumea inconjuratoare. De exemplu, primul model de masina a fost mult timp gandit si dificil de construit. Evident ca nu a atins perfectiunea si, omul a dorit repede ceva mai performant si mai frumos. Prin urmare, s-a trecut la crearea celui de-al doilea model. Ar fi o naivitate sa credem ca lucrul la acest al doilea model a fost luat de la zero. De fapt, s-a pornit de la primul model si s-a incercat o imbunatatire a lui in diferite directii - s-a redus ceea ce nu era bun, s-au adaugat elemente noi si au fost facute modificari. Astfel s-a nascut si al doilea model. Pornind de la el, in acelasi stil, s-au creat noi modele. Si masinile elegante pe care le vedem azi ruland cu viteza pe sosele se trag tot din acea prima masina. Baza este aceeasi, "putin" imbunatatita.
In Java pentru a crea o clasa noua trebuie specificate: clasa mostenita si diferentele fata de clasa mostenita. Clasa mostenita se specifica in clauza extends.
modificator NumeClasa extends ClasaDeBaza
Clasa mosteneste toate metodele accesibile si variabilele superclasei sale.
Exemplu: Urmatoare ierarhie de clase:
se exprima in Java astfel:
class A
class B extends A
class C extends B
class D extends B
Daca clauza extends lipseste, implicit clasa mosteneste clasa Object.
Observatie: In Java mostenirea multipla nu este permisa. Adica o clasa poate sa mosteneasca o singura clasa nu mai multe.
Prin urmare, orice clasa are o superclasa si poate avea una sau mai multe subclase.
In exemplul nostru avem:
clasa A este subclasa a clasei Object si are o subclasa: clasa B.
clasa B este subclasa a clasei A si are o subclasa: clasa C.
clasele C si D sunt subclase ale clasei B si nu au subclase.
Nu este permisa o asemenea mostenire (mostenire multipla):
Avantajele crearii unei ierarhii de clase
- functionalitatea comuna a mai multor clase se pune in superclase. Acest aranjament permite ca functionalitatea sa fie refolosita in mod repetat deoarece fiecare subclasa primeste informatia comuna din superclasa.
- schimbarea sau inserarea unei clase in partea de sus a ierarhiei determina automat schimbari in comportamentul claselor de jos
Ce se intampla cand o clasa contine o metoda care are acelasi antet cu metoda unei superclase? Este executata prima metoda intalnita - cautarea facandu-se pornind de la baza ierarhiei in sus. Datorita acestui fapt, se pot scrie metode care sa ascunda metodele din superclase.
Daca o metoda din superclasa nu este rescrisa ea va fi luata ca atare de subclasa. Nu acelasi lucru se intampla si cu constructorii. Fiecare clasa derivata trebuie sa isi defineasca proprii constructori. Daca nu se scrie nici un constructor in subclasa, atunci se genereaza constructorul implicit.
Exemplu: Se definesc doua clase Rational si RationalIred care mosteneste clasa Rational. In linia 15 se construieste un obiect al clasei Rational prin apelarea constructorului cu doi parametrii. Acest constructor exista deci, totul este in regula. In linia 16 se doreste construirea unui obiect al clasei RationalIred tot prin apelarea constructorului cu doi parametrii. Dar, in acest caz este generata o eroare deoarece clasa RationalIred nu are definit constructorul cu doi parametrii.
1. public class Rational
6. public Rational(long m,long n)
10. }
11. public class RationalIred extends Rational
14.
15. Rational r = new Rational(2,5);
16. RationalIred r1 = new RationalIred(2,5);
Pentru ca linia 16 sa nu mai genereze eroare, clasa RationalIred trenbuie sa arate astfel:
1. public class RationalIred extends Rational
5. public RationalIred(long m,long n)
9. }
In cadrul unei metode a subclasei care supradefineste o metoda din superclasa se poate apela metoda supradefinita (a superclasei), folosind super.
Exemplu: Reluam exemplul precedent. Subclasa RationalIred contine ca si superclasa Rational doi constructori: unul fara parametrii si unul cu doi parametrii. Constructorii subclasei au aceeasi functionalitate cu cei ai superclasei. In linia 16 se apeleaza constructorul fara parametrii ai superclasei Rational. In linia 19 se apeleaza constructorul cu doi parametrii ai superclasei Rational. Pe langa cei doi constructori care au aceeasi functionalitate in ambele clase, a mai fost definita o metoda produs care este suprascrisa in subclasa. Metoda produs din subclasa trebuie sa faca ceva in plus fata de metoda superclasei. Prin urmare, "se copiaza " comportamentul metodei din liniile 10-12 si se adauga ceva in plus. "Copierea" se realizeaza in linia 22, iar adaugarea in linia 23. Aceasta "copiere" consta in apelarea metodei din superclasa.
1. public class Rational
6. public Rational(long m,long n)
10. public void produs()
13. }
14. public class RationalIred extends Rational
18. public RationalIred(long m,long n)
21. public RationalIred produs(RationalIred r)
25. }
Observatii:
Cand se doreste apelarea constructorului superclasei se foloseste doar super().
Cand se doreste apelarea unei metode a superclasei se foloseste super.NumeMetoda().
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1674
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved