Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [java]cast di classi

  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]cast di classi

    Ciao riguardando un esericzio mi è venuto un dubbio:
    codice:
    class A{
    public String show(){
    return ("brava");
    }
    }
    
    class B extends A{
    public String show(){
    return ("elena");
    }
    }
    
    class Test{
    public static void main(String[] args){
    A t=new A();
    B i=(B)t;
    System.out.println(i.show());
    }
    }
    La classe Test è compilata correttamente ma in esecuzione mi dà un errore di Cast...xkè?poi se cambio
    codice:
    A t=new A();
    B i=(B)t;
    in:

    codice:
    A t=new A();
    B i=(B)t;
    }
    }
    Perchè il compilatore stampa la stringa "elena" e non "brava"?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    La classe Test è compilata correttamente ma in esecuzione mi dà un errore di Cast...xkè?
    Visto che parti da un reference di tipo A (la variabile t) e fai un cast a B che è in relazione di ereditarietà (e questo soddisfa il compilatore) ma è un sottotipo, questo si chiama "downcast" o anche detto "narrowing". Prevede un controllo fatto a runtime dalla JVM. La JVM semplicemente verifica: l'oggetto realmente istanziato è davvero di tipo B? Nel tuo caso no. L'oggetto davvero istanziato con new è un A. Quindi il cast fallisce a runtime.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    Ciao scusa x il ritardo..ma fare il cast non è come se mi spostassi da una classe all'altra?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    ma fare il cast non è come se mi spostassi da una classe all'altra?
    Quello che il cast cambia è solo il tipo "statico" del reference usato nel codice. L'oggetto in sé che è stato istanziato non cambia.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Volendo spiegare con parole semplici è come avere una telecamera (il nostro reference) puntata su un oggetto.
    La telecamera può inquadrare tutto l'oggetto o solo una parte; il cast permette di modificare l'inquadratura, zoomando o allargando, ma l'oggetto istanziato non cambia.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.