Documente Academic
Documente Profesional
Documente Cultură
SCOPUL LUCRRII
II.
NOIUNI TEORETICE
1. Variabile shadow
Vezi Curs 7, seciunea 4.6.
else
System.out.println("Televizorul nu este in stare buna
de functionare \n");
}
public static void main(String args[ ]) {
System.out.println("Anul fabricatiei este: "
+Televizor.getAnFabricatie());
Televizor t1=new Televizor("Panasonic", 2002, 51, true);
t1.afisare();
}
}
public class TelevizorColor extends Televizor
{
int diagonala;
public TelevizorColor(String num, int an, int diag,
boolean stare)
{
nume=num;
an_fabricatie=an;
diagonala=diag;
merge=stare;
}
... //cititi observatiile de mai jos si accesati variabila
//diagonala in cadrul acestei clase
}
Observaii:
Observm declaraia n clasa TelevizorColor a unei variabile cu numele
diagonala, care umbrete variabila cu acelai nume declarat n clasa Televizor.
Dac accesm numele diagonala sau sinonimul this.diagonala n cadrul clasei
TelevizorColor vom accesa variabila diagonala declarat n TelevizorColor.
Altfel, putem sa distribuim (cast) pe this clasei corespunztoare apoi s accesm
variabila shadow: ((Televizor this) .diagonala.
Aceast tehnic este util atunci cnd n cadrul unei clase se dorete s se
acceseze o variabil shadow dintr-o clas care nu este superclasa acesteia.
int getAnFabricatie()
{
return an_fabricatie;
}
int getDiagonala()
{
return diagonala;
}
}
public class TelevizorColor extends Televizor
{
int diagonala=52;
int an_fabricatie=2000;
int getAnFabricatie()
{
return an_fabricatie+1;
}
int getDiagonala()
{
return diagonala-1;
}
}
...//realizati afisarea
//descrise mai sus
anumitor
informatii
folosind
metodele
Observaii:
Am declarat n clasa TelevizorColor metodele getAnFabricatie() i
getDiagonala() avnd acelai nume, tip i aceleai argumente cu metodele din cadrul
superclasei Televizor.
Cnd aceste metode sunt invocate pentru un obiect al clasei TelevizorColor este
apelat metoda din cadrul ei i nu cea a superclasei Televizor.
Trebuie reinut faptul c suprascrierea metodelor nu este acelai lucru cu
suprancrcarea metodelor (n cazul suprancrcrii metodelor este vorba de mai multe
metode cu acelai nume dar cu liste de argumente diferite).
De asemenea, trebuie tiut faptul c suprascrierea metodelor nu reprezint, la
nivelul metodelor, acelai lucru ca i variabilele shadow (vezi cursul 7, sectiunea 4.7).
distV(Punct p) {
y - p.y;
distH(Punct p) {
x - p.x;
Se observ c din interiorul metodelor distV / distH putem accesa liber membrii
privai ai obiectului p dat ca parametru. La fel ar sta lucrurile i daca p ar fi o variabil
local a unei metode din clasa Punct.
B. Exteriorul sau clienii clasei. Clienii unei clase pot accesa doar acei membri
care au ca modificator de acces cuvntul public. Membrii declarai cu modificatorul
private NU sunt vizibili n afar, sunt ascuni. Dac am ncerca s folosim n metoda
main din exemplul nostru o referin de genul:
p1.x
package pac2;
import pac1.produs;
public class TestProdus
{
public static void main(String args[ ])
{
produs p=new produs("Poiana",23,287);
p.afis( );
p.cod=112; // ok; "cod" este "public"
p.afis();
//
p.cantitate+=10; eroare - "cantitate" este "protected"
//
p.denumire="Laura"; eroare - "denumire" este "private"
}
}
III.
MODUL DE LUCRU
IV.
TEM