III. Limbajul JAVA -Clase.Relatii de mostenire
1. Clase
Clasa este o descriere a unei multimi de obiecte caracterizate prin structuri si comportamente similare.
O clasava cuprinde:
Atribute – definitiile datelor (starii obiectelor)
Metode – rutinele ce implementeaza comportamentul obiectelor
Sintaxa folosita pentru a defini o clasa in Java este:
[modificatori] class nume_clasa [mostenire] { // date si metode }
Atributele:
- Variabile instanta – starea fiecarui obiect
- Variabile clasa – comune – declarate “static”
- Constantele – atribute declarate “final”
Exemple:
Persoana p1; p1.nume java.lang.Math.PI
Metodele–proceduri si functii care implementeaza comportamentul obiectelor
Java permite supraincarcareametodelor dupa parametrii dar nu si dupa tipul returnat. Ex:
boolean setNume( String nume ); boolean setNume( String nume, String prenume); String setNume( String nume ); // gresit
Metodele pot fi ale instantelor sau ale clasei
Metodele clasei:
- declarate “static”
- pot actiona doar asupra atributelor de clasa
- se aplica clasei si nu obiectelor ( ex: java.lang.Math.random() ).
Metoda speciala: main() –punct de intare in program.
Metode speciale: constructorii–permit initializarea obiectelor la creare
Constructorii permit supraincarcarea
Orice clasa are fie constructori expliciti fie un constructor implicit fara argumente
Caracteristicile unei metode constructor:
- are acelasi nume cu clasa
- nu returneaza nimic
- va fi apelata automat la crearea unui obiect nou
- trebuie declarat public
Exemplu:
public class Persoana{ /** Atributele clasei */ String nume;// numele de familie String prenume; // prenumele persoanei int varsta; // varsta in ani impliniti … /** Constructor */ public Persoana( String numePers, String prenumePers ) { nume = numePers; prenume = prenumePers; varsta = 0; } /** Metodele clasei */ public String getNume() { return nume+" "+prenume; } … }
2. Modificatorii
Modificatori de vizibilitate pentru membrii unei clase: public, private, protected
Public: acces nelimitat
Private: acces restrictionat la clasa respectiva
Protected: semnificatie in contextul mostenirii
Implicit: vizibilitate la nivel de package
Recomandare: atributele –protected; metodele –public
Metode de acces: getAtribut(), setAtribut()
3. Crearea instantelor
Instanta este un obiectal clasei respective
Instanta are o stare data de atributele de tip variabila instanta
In Java toate instantele unei clase se creaza in mod dinamic
Crearea unei instante presupune aplicarea operatorului new() de alocare dinamica:
p1 = new Persoana( “Ionescu”, “Mihai”);
Operatorul new() va chema constructorul clasei respective pentru a face initializariledupa alocarea memoriei pentru instanta.
4. Gestionarea memoriei
In Java nu exista nici un operator pentru stergerea unei instante (si eliberarea resurselor ei)
De eliberarea resurselor se ocupa o componenta a masinii virtuale numita Garbage Collector(GC)
Principiul de lucru al GC:Daca spre un anumit obiect nu mai exista nici o referinta externa, acel obiect devine candidat la eliminare din memorie:
… Persoana p1 = new Persoana(“Ionescu”); p1 = p2; // Ob. “Ionescu”devine candidat la eliminare
GC actioneaza doar atunci cand este necesar (nu mai sunt suficiente resurse pentru noi alocari)
Pentru a efectua operatii suplimentare la eliminarea obiectului se poate scrie o metoda finalize:
protected void finalize() throws Throwable { System.out.println(“Se elimina persoana"+getNume()); }
5. Mostenire
Permite reutilizarea codului prin extinderea unei clase
Superclasa–clasa mostenita (clasa de baza)
Subclasa–clasa mostenitoare (clasa derivata)
Subclasa este “un fel de” superclasa
Mostenirea:
- Simpla
- Multipla
La mostenirea multipla: conflicte de nume
Java permite doar mostenire simpla intre clase
Obs.O superclasa poate fi extinsa de mai multe subclase distincteSintaxa Java pentru specificarea unei mosteniri:
class nume_subclasaextendsnume_superclasa{ //continut specific subclasei }
O subclasa mosteneste toti membrii declarati ca fiind “public”sau “protected”in superclasa
Membrii declarati “private”in superclasa nu sunt accesibili un subclasa
Membrii mosteniti se comporta ca si membrii definiti in clasa
O clasa de baza impreuna cu toate descendentele ei formeaza o ierarhie de clase
Mostenirea in Java permite suprascrierea metodelor pentru a reflecta particularitatile subclasei
Apelul unei metode din superclase se poate face prin:
super.numeMetoda(parametrii)
Un obiect de tip subclasa poate fi referit de o variabila de tip superclasa, insa isi pastreaza identitatea.
[…] Limbajul JAVA -Clase.Relatii de mostenire […]
Ce face mai exact JVM cand doar definim o variabila?