View Full Version : [Java][Pseudocodice] Type checking a compile time
ciccionamente90
13-07-2013, 17:19
Ciao amicici.
Se avessi il seguente scenario:
class TypeA{...}
class TypeB extends TypeA{...}
class TypeC extends TypeB{...}
con le seguenti dichiarazioni:
TypeA a;
TypeB b;
TypeC c;
Il compilatore considererebbe corretti i seguenti assegnamenti?
b=a;
c=b;
Grazie.
ciccionamente90
13-07-2013, 21:25
Domanda interessante. :)
Secondo me no: darebbe errore.
b è sottotipo di a e c è sottotipo di b, secondo me nessun problema!
ciccionamente90
13-07-2013, 21:55
Il problema "di correttezza" dell'assegnamento in generale ci sarebbe (il tipo apparente dovrebbe essere sopra-tipo del tipo effettivo). Per quale motivo riterresti che a compile-time tale check non venga effettuato?
ciccionamente90
13-07-2013, 23:21
Attualmente non ne ho la possibilità.
pabloski
14-07-2013, 12:02
No, non è corretto quello che hai scritto.
Corretto sarebbe
a = new TypeB();
Quest'operazione si chiama Upcasting. Cioè definisce un riferimento ad un oggetto di classe madre e gli assegni il riferimento effettivo di un oggetto di classe figlia.
Ovviamente non avrai accesso ai membri previsti dalla classe figlia, ma solo a quelli della classe madre.
Quest'ultima frase, ti fa capire perchè l'inverso è impossibile.
L'unica cosa che puoi fare è prendere quell'a e assegnarlo successivamente a b ( downcasting ).
ciccionamente90
14-07-2013, 14:01
Grazie per la risposta, ma il fatto è che io so che non è corretto, ma non sono certo del fatto che il compilatore se ne accorga.
pabloski
14-07-2013, 15:38
Grazie per la risposta, ma il fatto è che io so che non è corretto, ma non sono certo del fatto che il compilatore se ne accorga.
Si, se ne accorge. Ti dà un type mismatch.
ciccionamente90
14-07-2013, 15:46
Grazie mille. :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.