CATEGORII DOCUMENTE |
Extinderi de clase, clase componente, mostenire
Java permite doua mecanisme de folosire a facilitatilor unei clase in interiorul alteia : clasa componenta si clasa care extinde (mosteneste) alta clasa.
O clasa componenta apare atunci cand in interiorul unei clase se foloseste o variabila de tipul altei clase.
import java.io.*;
public class Salariat
public Persoana(String nume, int virsta, int sectie, float salariu)
public String getNume()
public int getVirsta()
public int getSectie()
public float getSalariu()
public void list()
public static void main (Stringas args)
}
Clasa Persoana este clasa componenta in clasa Salariat. Desi este intalnita in programe, facilitatea clasei componente are unele inconveniente. Metodele getNume() si getVirsta() folosesc serviciile cu acelasi nume din clasa Persoana prin intermediul instantei pers. Aceast aspect pare cam fortat desi nu este un inconvenient. Situatia se schimba atunci cand observam cazul primului salariat care se instantiaza prin intermediul constructorului fara parametri. In interiorul acestuia se instantiaza variabila pers prin constructorul fara parametri al clasei Persoana. Datorita limitarilor functionale din clasa Persoana nu vom putea seta numele si varsta acestui salariat cu alte valori. Vor ramane cele implicit stabilite in clasa Persoana.
In cazul celor doua tipuri de date Persoana si Salariat solutia eleganta este oferita de mecanismul de extindere de clasa. Folosind cuvantul cheie extends vom defini clasa Salariat ca extensie a clasei Persoana. Spunem ca Salariat este subclasa a clasei Persoana sau ca aceasta este supraclasa a clasei Salariat. Noua clasa va mosteni toti membrii clasei Persoana. Pentru a avea acces nemijlocit in clasa Salariat asupra variabilelor mostenite nume si virsta este necesar sa schimbam in clasa Persoana modificatorul de acces al acestora din private in protected. Cu aceasta precizare, clasa Salariat arata astfel,
import java.io.*;
public class Salariat
public Persoana(String nume, int virsta, int sectie, float salariu)
public String getNume()
public int getVirsta()
public int getSectie()
public float getSalariu()
public void setNume(String nume)
public void setVirsta(int virsta)
public void setSectie(int sectie)
public void setSalariu(float salariu)
public void list()
public static void main (Stringas args)
}
Se observa ca o parte dintre instructiunile primului constructor Salariat() coincid cu instructiunile primului constructor Persoana(). Pentru a evita astfel de duplicari, Java permite apelul constructorului supraclasei in cadrul constructorului subclasei folosind cuvantul cheie super, dupa cum se vede in al doilea constructor Salariat(). Singura restrictie este ca super sa fie primul apel in cadrul noului constructor.
Metodele getNume() si getVirsta() suprascriu pe cele din clasa Persoana prin simplul apel al acestora folosind super. Metoda list() o suprascrie pe cea din clasa Persoana dar adauga si o noua instructiune.
In Java este permisa mostenirea multipla, spre exemplu clasa C mosteneste (extinde) clasa B care mosteneste clasa A. Fie x un nume de variabila intalnit in fiecare clasa. Atunci, in clasa C sunt posibile referirile,
this.x refera x din C
super.x refera x din B
((B)this).x refera x din B
((A)this).x refera x din A
Daca o clasa este declarata cu atributul final atunci ea nu mai poate fi extinsa. Opusul acestui atribut este abstract.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1114
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved