Quote Originariamente inviata da newutente Visualizza il messaggio
Quello che non mi è chiaro è cosa fa esattamente questa istruzione:
Punto ogg = new PuntoTridimensionale();

Cioè viene innanzitutto creato un reference di tipo Punto, a quel punto si passa al reference un oggetto di tipo PuntoTridimensionale e quindi il reference a quel punto conterrà un indirizzo di memoria (dove si trova l'oggetto) e un'area di puntamento.
'ogg' è una variabile di tipo "reference" a Punto. Dove è fisicamente nella memoria dipende dal contesto in cui è dichiarata, se è una variabile "locale" ad un metodo/costruttore, allora è allocata sullo stack, altrimenti se è una variabile di istanza/di classe, è allocata sul heap.
Ma a parte questo è genericamente uno spazio di memoria di tot bit (quanto occupa un reference a runtime non è ora importante e dipende da vari fattori).

Dopo aver istanziato un PuntoTridimensionale si ha quindi un reference a quest'oggetto e il valore di questo reference (qualunque esso sia e con quanti bit sia) viene semplicemente assegnato alla variabile.
La assegnazione è corretta solo se PuntoTridimensionale "è-un" Punto, ovvero se deriva da Punto. Altrimenti il compilatore si lamenterebbe ....