Problemi col cast

di il
5 risposte

Problemi col cast

Ragazzi dovrei fare un cast tra una classe figlia e una classe padre..
Qualcuno sa dirmi come fare?

Grazie..

5 Risposte

  • Re: Problemi col cast

    ack93 ha scritto:


    Ragazzi dovrei fare un cast tra una classe figlia e una classe padre..
    Qualcuno sa dirmi come fare?
    Da un sotto-tipo (es. String) ad un super-tipo (es. Object) si chiama up-cast, non c'è bisogno di un cast esplicito: String è-un Object.

    Da un super-tipo (es. Object) ad un sotto-tipo (es. String) si chiama down-cast, è ed controllato a runtime per verificare se l'oggetto è realmente di quel sotto-tipo:

    Object obj = "hello";
    String s = (String) obj; // Ok a runtime (perché obj referenzia davvero un String)

    Object obj = new Integer(123);
    String s = (String) obj; // Errore a runtime: ClassCastException !
  • Re: Problemi col cast

    Scusa sono stato io a non spiegarmi bene...

    Devo fare il cast da una classe figlia (Es: Autovettura) ad una classe Padre(Es:Veicoli)

    in modo tale da far comparire a video tramite una System.out un metodo presente nella classe FIGLIA.. Eclipse mi dice di fare un cast.. solo che non ho capito bene come funzione..
  • Re: Problemi col cast

    ack93 ha scritto:


    Scusa sono stato io a non spiegarmi bene...

    Devo fare il cast da una classe figlia (Es: Autovettura) ad una classe Padre(Es:Veicoli)
    E io ti ho correttamente detto che un "up-cast" non ha bisogno di cast esplicito.

    ack93 ha scritto:


    in modo tale da far comparire a video tramite una System.out un metodo presente nella classe FIGLIA..
    No, con un reference del super-tipo il compilatore "vede" e può solo invocare metodi noti nel super-tipo. Non può invocare metodi "nuovi" specifici del sotto-tipo.

    E forse c'è bisogno di un altro esempio:

    Object obj = "hello";

    Su obj NON posso invocare es. substring o trim (metodi di String) anche se l'oggetto referenziato è realmente un String. Il compilatore "vede" Object e basta, solo i suoi metodi sono invocabili. I metodi di istanza sono soggetti ad override, quindi se invoco toString() (noto in Object), in realtà a runtime verrà invocato il toString() di String, perché è stato "ridefinito" in String.
  • Re: Problemi col cast

    Se hai es.:

    Veicolo veicolo = ....... // Potrebbe referenziare un Automobile o altro "veicolo"

    puoi fare:

    ((Automobile) veicolo).metodoSpecificoDiAutomobile();

    ma devi essere sicuro che veicolo punti ad un Automobile e non es. Motociclo (per dire). Altrimenti come ho già detto .... ClassCastException !
  • Re: Problemi col cast

    Ti ringrazio... Ho capito e mi funziona

Devi accedere o registrarti per scrivere nel forum
5 risposte