Originariamente inviato da OltreLeStelle
Ragazzi un piccolo aiuto, ho un piccolo esercizio :
Si consideri il seguente frammento di codice in linguaggio Java:
public void foo(Object obj){
...
Veicolo veicolo = (Veicolo) object;
...
}
Rispetto alla linea evidenziata in grassetto:
(a) spiegarne brevemente il significato;
(b) spiegare la differenza tra tipo static type e dynamic type
(c) cosa accade se lo static type dell'oggetto riferito da object è una superclasse di Veicolo?
(d) cosa accade se lo static type dell'oggetto riferito da object è una sottoclasse di Veicolo?
Sono riuscito a rispondere solo alla (b) : Il tipo statico è quello che viene usato nella dichiarazione della variabile, è determinato a tempo di compilazione. Il compilatore permette di invocare i metodi del tipo statico (ovvero verifica che su una variabile siano invocati i metodi del suo tipo statico).
Il tipo dinamico è quello dell'oggetto realmente istanziato e quindi referenziato in memoria e stabilisce quale sarà l'implementazione usata. E' giusto?
Per la (a) mi viene in mente che è un upcasting (giusto?) e non altro... mentre le altre due?
Grazie!