Ho letto questo codice da qualche parte
class Foo {
public int a;
public Foo() {
a = 3;
}
public void addFive() {
a += 5;
}
public int getA() {
System.out.println("we are here in base class!");
return a;
}
}
public class Polymorphism extends Foo{
public int a;
public Poylmorphism() {
a = 5;
}
public void addFive() {
System.out.println("we are here !" + a);
a += 5;
}
public int getA() {
System.out.println("we are here in sub class!");
return a;
}
public static void main(String [] main) {
Foo f = new Polymorphism();
f.addFive();
System.out.println(f.getA()); // SOP 1
System.out.println(f.a); // SOP 2
}
}
Per SOP1 otteniamo risposta 10 e per SOP2 otteniamo risposta 3. La ragione per questo è che non è possibile sovrascrivere le variabili mentre è possibile farlo per i metodi. Ciò accade perché il tipo della variabile di riferimento viene controllato quando si accede a una variabile e il tipo dell'oggetto viene controllato quando si accede a un metodo. Ma mi chiedo, ma perché è così? Qualcuno può spiegarmi qual è la ragione di questo comportamento