Moștenirea și polimorfismul

Moștenirea este una din proprietățile fundamentale ale claselor în programarea orientată pe obiecte. Ea constă în faptul că dintr-o clasă se pot deriva alte clase. Clasa de baza se mai numeste și superclasă, iar clasele derivate se numesc și subclase.

Fiecare clasă derivata moștenește câmpurile și metodele superclasei. Aceasta înseamnă că toate câmpurile și metodele existente în superclasă sunt utilizabile și în subclasă, dar în aceasta din urmă pot exista, de asemenea, câmpuri și/sau metode suplimentare.

Polimorfismul este o alta proprietate fundamentală a claselor. În limbajul Java este posibil ca o metodă a superclasei să fie redefinită în subclasă. Aceasta înseamnă că ea va avea în subclasă același nume și aceeasi lista de parametri și același tip de valoare întoarsă ca în superclasă, dar va avea un comportament diferit.
 
Să considerăm, de exemplu, că exista clasa Poligon, în care există metoda double arie(). Aceasta metodă este o funcție, a cărei valoare este aria poligonului. Sa considerăm acum că Triunghi și Patrat sunt doua clase derivate din clasa Poligon. În ambele clase derivate va exista metoda double arie(), dar este evident că modul de calcul al ariei triunghiului diferă de cel al calculării ariei patratului și, cu atât mai mult, de modul de calcul al ariei unui poligon oarecare.

Ierarhia de clase Java

În general, în programarea orientată pe obiecte este permisă moștenirea multiplă, adică o clasă poate avea mai multe superclase. În limbajul Java este permisă numai moștenirea simplă, deci fiecare clasă poate avea numai o singură superclasă. Această ierarhie de clase este unică, adică orice clasă are obligatoriu o superclasă și numai una. Singura excepție o constituie clasa Object, care este rădăcina  ierarhiei de clase Java și nu are superclasă.

Vom arata ulterior că lipsa moștenirii multiple este compensată în Java prin faptul că fiecare clasa poate avea mai multe interfețe.

Atribuirea de valori variabilelor-referință

Unei variabile referință i se pot atribui ca valori referință la obiecte din clasa variabilei respective sau din clasele derivate.
 
De exemplu, având în vedere că clasa String este derivată din clasa Object, urmatoarele instrucțiuni sunt corecte:

    Object ob;
    String s=new String("abcd");
    ob=s;

În primele două instrucțiuni, s-au declarat variabilele-referință ob din clasa Object și s din clasa String, ultima fiind inițializată cu o referință către șirul "abcd", care a fost creat folosind operatorul new. În a treia instrucțiune, variabilei-referință ob i se atribuie valoarea variabilei-referință s. În consecință, acum variabila ob din clasa Object are ca valoare o referința către obiectul "abcd" din clasa String.
 



© Copyright 2000 - Severin BUMBARU, Universitatea "Dunărea de Jos" din Galați