170 likes | 264 Views
Programare Orientata Obiect. Curs 3 Modificatori Constructori. Continutul cursului. Introducere Platforma Java, Clase si Obiecte Modificatori, Constructori. Curs 3. Modificatori 1.1 Modificatori de acces 1.2 Modificatorul static 1.3 Modificatorul final
E N D
Programare Orientata Obiect Curs3 Modificatori Constructori Curs 3
Continutul cursului • Introducere • Platforma Java, Clase si Obiecte • Modificatori, Constructori Curs 3
Curs 3 • Modificatori 1.1 Modificatori de acces 1.2 Modificatorulstatic 1.3 Modificatorulfinal 1.4 Modificatori de clasa 2. Constructori 2.1 Instantiereaobiectelor 2.2 Definitie 2.3 Declarareaconstructorilor 2.4 Supraincarcareaconstructorilor 2.5 Folosirealuithis Curs 3
C3. Modificatori 1.1 Modificatori de acces • private: membrii pot fi accesati doar din interiorul clasei • protected: membrii pot fi accesati in clasele din acelasi packet (vezi “Pachete in Java”), in subclase (vezi “Mostenirea claselor”) sau in interiorul clasei • public: membrii sunt accesibili atat in interiorul cat si in exteriorul clasei Curs 3
Masina.java public class Masina { public String culoare = “red”; public float lungime; public float latime; private float pret; public static int id=0; public void setPret (float p) { pret = p; } } • public class UseMasina { • public static void main (String args[]){ • Masina m1 = new Masina(); • m1.lungime = 4.55f; • m1.pret = 9990.9f; • } • } UseMasina.java %> javac Masina.java %> javac UseMasina.java UseMasina.java:5: pret has private access in Masina m1.pret = 9990.9f; ^
Masina.java public class Masina { public String culoare = “red”; public float lungime; public float latime; private float pret; public static int id=0; public void setPret (float p) { pret = p; } } • public class UseMasina { • public static void main (String args[]){ • Masina m1 = new Masina(); • m1.lungime = 4.55f; • m1.setPret (9990.9f); • } • } UseMasina.java
C3. Modificatori 1.2 Modificatorul static • O singura copie a membrului exista, comuna tuturor obiectelor din clasa • Membrii statici pot fi accesati direct in clasa • Accesarea din afara clasei se poate face in 2 moduri: • Prin intermediul clasei System.out.println(Masina.id); • Prin intermediul obiectului System.out.println(m1.id); • Important! Membrii ne-statici pot fi accesati din afara clasei doar prin intermediul obiectelor. Curs 3
C3. Modificatori 1.2 Modificatorul static public class UseMasina { public static void main (String args[]){ Masina m1 = new Masina(); Masina.id++; System.out.println(m1.id); //Rezultat? Masina p2 = new Masina(); Masina.id++; System.out.println(p2.id); //Rezultat? System.out.println(p1.id); //Rezultat? } } 1 2 tot 2!
C3. Modificatori 1.3 Modificatorul final • Dupa initializare valoarea campului nu mai poate fi modificata • Se foloseste, de obicei, pentru definirea constantelor • Campurile definite ca static final trebuie initializate atunci cand se defineste clasa • Campurile ne-statice si final trebuie initializate cand obiectul este initializat final int count; count = 10; //urmatoarea linie va provoca o eroare count = 20; Curs 3
C3. Modificatori 1.4 Modificatori de clasa • public • Accesibila in mod public • Fara acest modificator clasa poate fi folosita doar in cadrul pachetului in care se afla • abstract • Clasa declarata este abstracta (vezi “Clase Abstracte”) • Nu poate fi instantiata • final • Nu poate fi mostenita (vezi “Mostenirea/Extinderea Claselor”) • Un fisier poate sa contina mai multe clase, dar doar o singura clasa poate sa fie publica. Numele fisierului trebuie sa fie acelasi cu numele clasei publice. Curs 3
C3. Constructori 2.1 Instantierea obiectelor • class Body { • private long idNum; • private String name = “empty”; • private Body orbits; • private static long nextID = 0; • } Body b = new Body( ); • Un obiect este instantiat prin folosirea instructiunii new • Masina virtuala aloca memorie pentru stocarea noului obiect • Daca nu exista suficient spatiu, modulul “Garbage Collector” va incerca sa elibereze memorie prin stergerea unor obiecte care nu mai sunt folosite. Daca nici in acest mod nu se obtine suficienta memorie, programul va arunca o exceptie de tip OutOfMemoryError (vezi “Exceptii”) • Memoria nu trebuie eliberata explicit defineste o variabila b de tip Body creaza un nou obiect Body
C3. Constructori 2.2 Definitie • Un constructor reprezinta o modalitate de a initializa un obiect imediat dupa instantierea lui • Constructorii sunt metode (functii), dar nu intorc nici o valoare (!) • Un constructor are acelasi nume cu clasa (!) • Poate avea aceeasi modificatori de acces ca si alte metode • Daca un cosntructor nu este declarat explicit de catre programator, se considera ca exista un constructor fara argumente si care initializeaza campurile obiectului cu valorile implicite. Curs 3
idNum: name: idNum: name: nextID = nextID = sun sun idNum: name: earth nextID = C3. Constructori • 2.3 Declararea constructorilor • class NumeClasa { • [modificatori] NumeClasa([argumente]) { • // Constructor • } • } class Body { private long idNum; private String name= “empty”; private static long nextID = 0; Body(String bodyName) { idNum = nextID++; name = bodyName; } } Body sun = new Body( ); Body sun = new Body(“Sol”); Body earth = new Body(“Earth); 0 1 0 empty Sol Earth 0 1 2
idNum: name: idNum: name: nextID = nextID = sun sun idNum: name: earth nextID = C3. Constructori class Body { private long idNum; private String name= “empty”; private static long nextID = 0; Body( ) { idNum = nextID++; } Body(String bodyName) { idNum = nextID++; name = bodyName; } } • Body sun = new Body( ); Body sun = new Body(“Sol”); • Body earth = new Body(“Earth); 2.4 Supraincarcarea constructorilor • O clasa poate avea mai multi constructori atat timp cat lista de parametrii este diferita. 0 1 0 empty Sol Earth 1 1 2
C3. Constructori 2.5 Folosirea lui this • In cadrul unui constructor se poate folosi this pentru a apela un constructor deja existent. In mod obligatoriu trebuie sa fie prima instructiune din constructor. • this poate fi folosit si ca referinta la obiectul curent. Curs 3
idNum: name: idNum: name: nextID = nextID = sun sun idNum: name: earth nextID = C3. Constructori class Body { private long idNum; private String name= “empty”; private static long nextID = 0; Body( ) { idNum = nextID++; } Body(String bodyName) { this(); this.name = bodyName; } } • Body sun = new Body( ); Body sun = new Body(“Sol”); • Body earth = new Body(“Earth); 2.5 Folosirea lui this 0 1 0 empty Sol Earth 1 1 2
Continutul cursului • Introducere • Platforma Java, Clase si Obiecte • Modificatori, Constructori Curs 3