Visualizzazione dei risultati da 1 a 10 su 20

Discussione: polimorfismo per dati

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Piccola nota: se Punto rappresenta un punto 2D (quindi x,y) e PuntoTridimensionale lo estende aggiungendo la z .... allora la ereditarietà è sbagliata a priori concettualmente: un punto 3D NON è un caso "particolare" di punto 2D.
    hai perfettamente ragione, ho utilizzato quell'esempio giusto per capire.

    Quote Originariamente inviata da andbin Visualizza il messaggio
    Se PuntoTridimensionale estende Punto, la seconda riga è tecnicamente corretta per il compilatore (e compila) (ogg potrebbe fare riferimento ad un oggetto PuntoTridimensionale) ma a runtime il downcast fallirà sempre, perché l'oggetto realmente istanziato è un Punto (l'hai assegnato poco prima ...), che ovviamente non è un PuntoTridimensionale.
    E come si può risolvere il problema dell'area di puntamento?
    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. Quest'area di puntamento in teoria dovrebbe essere quella di PuntoTridimensionale visto che voglio poter accedere tramite ogg ai membri di PuntoTridimensionale, ma in realtà non è così e vorrei capire il perchè.

    EDIT: l'area di puntamento la "prende" da ciò che si trova a sinistra dell'uguale? scusate per la rozzezza ma voglio capire.
    Ultima modifica di newutente; 17-11-2014 a 18:01

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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 ....
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.