Sunteți pe pagina 1din 5

Laborator 4

Obiectiv – crearea de abilităţi practice de lucru în limbajul Java cu:

 Metode redefinite şi apeluri polimorfice

 Clase abstracte şi interfeţe

 Clase interioare

Suport bibliografic minimal – cursul nr.3

Indicaţii de lucru:

 Se vor exersa exemplele din curs ori de câte ori se va simţi nevoia, pentru înţelegerea
modului de lucru specific platformei Java
 Elementele fiecărui enunţ se vor adăuga gradual în cod

Probleme propuse:

Prb.1. Să se creeze Autovehicul cu subclasele Berlina și Sport (vezi diagrama). Să se demonstreze


mecanismul polimorfic al legării dinamice pentru metodele redefinite cu ajutorul metode
denumită tipAutomobil. În main avem codul din tabel care se adaugă treptat în proiect rezolvând
erorile care apar fără a modifica clasele. În metoda statică printAutomobil se va apela printBerlina
sau printSport în funcție de tipul obiectului primit ca argument.

1
Berlina b = new Berlina();
b.tipAutomobil();
b.printBerlina();
System.out.println("- 1. -");
Autovehicul s = new Sport(); // up casting
s.tipAutomobil(); // legare dinamica
s.printSport(); // ??? //down casting
System.out.println("- 2. -");
Object m = new Sport(); //up casting
m.tipAutomobil(); // ??? //down casting

TestPr01.printAutomobil(b);
TestPr01.printAutomobil(s);
TestPr01.printAutomobil(m)

Prb.2. Să se creeze clasele ce


definesc arborele de moştenire din
diagramă folosind clasele Tânăr,
Student și StudentBursier.
Folosind codul următor în main ce
observați?
Student s = new Student();
s.metoda1();
s.metoda2();
s.metoda3();

System.out.println("----");
Tanar sb = new
StudentBursier();
sb.metoda1();
sb.metoda2();
sb.metoda3();
// fortati in metoda1 din
student un apel catre
metoda1 din Tanar

Creaţi un masiv unidimensional cu un număr aleator de elemente ce nu depăşeşte 10, fiecare


element fiind o referinţă la oricare din tipurile Tânăr, Student, StudentBursier alese în mod aleator.
Pentru aceste referinţe apelaţi metode din clasa părinte. Ce observaţi la execuţie?

2
Prb.3. Creaţi clasa Parinte şi definiţi 2 metode
metodaA() şi metodaB(). În cadrul definiţiei metodaA
apelaţi metodaB. Creaţi clasa Derivată şi redefiniţi
metodaB(). Creaţi obiecte ale celor 2 clase şi apelaţi
metodaA şi metodaB. Explicaţi rezultatul.

Parinte p = new Parinte();


p.metodaA();
p.metodaB();

System.out.println("------------");

Parinte d = new Derivata();


d.metodaA();
d.metodaB();

Prb.4. Creaţi clasă ParintePr4 în care definiţi o


metodă abstract print(). Apelaţi această metodă în
cadrul metodei constructor. Creaţi clasa derivată
DerivatăPr4 ce conţine un câmp primitiv de tip
int cu valoarea 10. Redefiniţi metoda print astfel
încât să tipărească valoarea variabilei int.
In cadrul metodei main din clasa
principală se va crea un obiect al clasei derivate
şi se va apela metoda print. Să se explice
rezultatul.

Prb.5. Creaţi în cadrul unui pachet o interfaţă ce


declară 3 metode. Implementaţi interfaţa în alt
pachet. Exersaţi obiectele clasei ce implementează
interfaţa. Ce observaţi?

3
Prb.6. Creaţi interfaţa Interf1. Creaţi alte 2 interfeţe Interf2 şi Interf3 ce moştenesc prima
interfaţă. Creaţi interfaţa Interf4, ce moşteneşte Interf2 şi Interf3. Sugeraţi variante de
implementare. Comparaţi rezultatele cu cele pentru un caz similar implementat în C++.

Interf1 obj = new ClasaAA(); //in main


(...).metoda1();
(...).metoda2();
(...).metoda3();
(...).metoda4();

Prb.7. Creaţi o clasă în interiorul


altei clase. În clasa principală
instanţiaţi clasa interioară. Discuţii
privind modul de creare al obiectelor
clasei interioare.

ClasaExterioara cx = ...;
ClasaExterioara.ClasaIn ci = ...;
ci.metoda3();
ClasaExterioara.ClasaInStatica cis = ...;
cis.metoda1();

Prb.8. Creaţi o clasă ce conţine:


 O variabilă int cu specificatorul de acces private
 O metodă cu specificatorul de acces private

4
 O clasă interioară ce conţine:
o O metodă care:
 Modifică câmpul int din clasa exterioară
 Apelează metoda private din clasa exterioară
 O metodă care:
o Crează un obiect al clasei interioare
o Pentru obiectul creat apelează metoda definită în clasa interioară.
Ce efect are obiectul clasei interioare asupra obiectului clasei exterioare?

Prb.9. Când are acces o clasă exterioară la elementele private din clasa interioară? Demonstraţi.

S-ar putea să vă placă și