Salve a tutti, mi sono accorto di avere un pò di confusione sul concetto di overriding e di se e quando viene a fatta a tempo di compilazione.
Faccio un esempio di quello che non mi torna:
In questo caso l'output è "a c b"; Quindi nel terzo caso stampa b perchè viene scelta la classe in maniera dinamica quindi B, mentre viene scelto il metodo in maniera statica quindi A per cui viene chiamato il metodo che prende A di B quindi viene stampato b. E fin qui tutto ok.codice:class A{ String method(A a){ return "a"; }} class B extends A{ String method(A a){ return "b"; } String method(B b){ return "c"; } } public class Lab3_1 { public static void main(String[] args) { A a = new A(); B b = new B(); A c = new B(); System.out.println(a.method(a)); System.out.println(b.method(b)); System.out.println(c.method(c)); } }
In questo secondo caso invece:
C'è un output del tipo "Ciao da B: 92". Il problema è che seguendo il ragionamento che ho fatto prima dovrebbe stampare "Ciao da A: a". Perchè in questo caso la classe viene scelta staticamente e non dinamicamente?codice:class A2 { public void print(int num){ System.out.println("Ciao da A: " + num); } } class B2 extends A2{ public void print(char c){ System.out.println("Ciao da B: " + c); } } public class lab3_2 { public static void main(String[] args) { A2 a = new A2(); B2 b = new B2(); a=b; a.print('a'); } }
È chiaro che c'è qualche mia lacuna di fondo, in ogni caso se potete darmi una mano ve ne sarei grato :-)

Rispondi quotando