Visualizzazione dei risultati da 1 a 2 su 2

Discussione: conversioni ..

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085

    conversioni ..

    Ciao ..
    cosa capite voi da questo esempio .. ?
    relativamente ad una classe 'padre' (Pesce), e ad una classe 'figlia' (PesceRosso) .. si dice:

    un PesceRosso è sempre un Pesce
    ma un pesce (in generale) NON è un PesceRosso


    codice:
    Pesce p = new PesceRosso() ;  
    PesceRosso s =(PesceRosso) p;

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: conversioni ..

    Originariamente inviato da JANUS70
    relativamente ad una classe 'padre' (Pesce), e ad una classe 'figlia' (PesceRosso) .. si dice:

    un PesceRosso è sempre un Pesce
    Fin qui ok.

    Originariamente inviato da JANUS70
    ma un pesce (in generale) NON è un PesceRosso
    Sì, è vero, in generale. Ma una variabile di tipo Pesce può fare riferimento ad un oggetto PesceRosso.

    Originariamente inviato da JANUS70
    codice:
    Pesce p = new PesceRosso() ;  
    PesceRosso s =(PesceRosso) p;
    Il cast (PesceRosso) è precisamente un "down-cast". Il compilatore lo accetta perché "sa" che Pesce e PesceRosso sono in relazione di ereditarietà.
    Quando c'è un down-cast, il controllo è a runtime. La JVM va a verificare: "l'oggetto referenziato da p è realmente un PesceRosso?". Se sì, la assegnazione viene fatta, se no scatta una eccezione ClassCastException.

    Altro caso:
    codice:
    Pesce p = new PesceVerde() ;  
    PesceRosso s =(PesceRosso) p;
    Anche qui il compilatore lo accetta (quindi compila senza problemi) perché ripeto che "sa" che Pesce e PesceRosso sono in relazione (il cast teoricamente è possibile). Ma a runtime il cast fallisce (lanciando ClassCastException) perché l'oggetto referenziato da p non è davvero un PesceRosso.


    Ripeto ancora per chiarire meglio: a livello di compilazione, il compilatore si limita solo a verificare se il cast ha "senso". Se ho una variabile Integer non posso fare un cast a Long. Il compilatore proprio non lo accetta. Ma perché "sa" che Integer e Long (pur avendo la stessa classe base Number) non sono il relazione di ereditarietà tra di loro (nessuno dei due deriva dall'altro).

    Quello che poi succede a runtime è un altro conto. Qui si verifica se realmente l'oggetto referenziato può passare il cast. Se non lo passa salta fuori ClassCastException.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava 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 © 2025 vBulletin Solutions, Inc. All rights reserved.