Când vorbim despre polimorfism in Java, de obicei ne referim la metode. Oare lucrurile se petrec la fel și in cazul variabilelor ? Putem vorbi de
overriding, sau de
dynamic binding ? (
overloading-ul variabilelor nu poate exista, puteți verifica simplu de tot).
/**
* Analizati codul din Clasa1 si Clasa2. Ce observati la
* variabilele i3 si i5 ?
* Rulati metoda Polimorfism3.main(). Retineti si interpretati
* afisajul din consola.
* Incercati sa decomentati ultimele linii din main(). Ce eroare
* ar aparea ? De ce ?
* Decomentati metodele din Clasa2 (exceptand getI5() care
* genereaza eroare de compilare) si rulati din nou main().
* Comparati rezultatele cu rularea anterioara.
* Concluzie: exista overriding si dynamic binding in cazul
* variabilelor statice si nestatice ?
*/
package test;
import work.Clasa1;
import work.Clasa2;
public class Polimorfism3 {
public static void main (String [] args){
Clasa1 a = new Clasa2();//referinta Clasa1, obiect Clasa2
System.out.println(a.getI1()+" "+a.getI2()+" "+ a.getI3()
+" "+a.i3+" "+a.getI4()+" "+a.i4);
test1(a); test2(a);
Clasa2 b = new Clasa2();//referinta Clasa2, obiect Clasa2
test1(b); test2(b);
// System.out.println(b.getI1()+" "+b.getI2()+" "+ b.getI3()
// +" "+b.i3+" "+b.getI4()+" "+b.i4);
}
public static void test1(Clasa1 obj){
System.out.println(obj.i5);
}
public static void test2(Clasa1 obj){
System.out.println(obj.getI5());
}
}
package work;
public class Clasa1 {
private static int i1 = 1;
private int i2 = 2;
public static int i3 = 3; //vizibilitate maxima ("public")
public int i4 = 4;
public int i5 = 5; //tip: int
public int getI1(){
return i1;
}
public int getI2(){
return i2;
}
public int getI3(){
return i3;
}
public int getI4(){
return i4;
}
public int getI5(){
return i5;
}
}
package work;
public class Clasa2 extends Clasa1 {
//definim variabile cu acelasi nume ca cele din Clasa1:
private static int i1 = 6;
private int i2 = 7;
int i3 = 8; //nu mai este nici public nici static !
public int i4 = 9;
public String i5 = "string: 10"; //schimbare de tip !
// public int getI1(){
// return i1;
// }
// public int getI2(){
// return i2;
// }
// public int getI3(){
// return i3;
// }
// public int getI4(){
// return i4;
// }
// public String getI5(){
// return i5;
// }
}