PDA

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.

WarDuck
13-07-2013, 20:19
Tu che ne pensi?

ciccionamente90
13-07-2013, 21:25
Domanda interessante. :)
Secondo me no: darebbe errore.

ndakota
13-07-2013, 21:42
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?

WarDuck
13-07-2013, 23:10
Prova :)

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. :)