Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 13 su 13

Discussione: Downcasting di oggetti

  1. #11
    Mi spiace avere difficoltà a comunicare sull'argomento.
    L'override avviene a ritroso, prima cercando il metodo nella sottoclasse (un override del metodo presente anche in superclasse) poi se non lo trova lo cerca risalendo la gerarchia (non ho limiti in fatto di livelli di ereditarietà, che però è un concetto "univoco a salire").
    Quindi se un metodo è overridden, viene eseguito sempre quello della sottoclasse, a maggior ragione se faccio downcasting dando al compilatore un riferimento a un oggetto più specifico (con metodi propri e altri eventualmente sovrascritti).

  2. #12
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    L'override avviene a ritroso, prima cercando il metodo nella sottoclasse (un override del metodo presente anche in superclasse) poi se non lo trova lo cerca risalendo la gerarchia (non ho limiti in fatto di livelli di ereditarietà, che però è un concetto "univoco a salire").
    A livello tecnico, implementativo della JVM, questo meccanismo NON è fatto come una "ricerca". La JVM non va a fare: guardo nella sottoclasse, altrimenti guardo nella classe sopra, ecc... Invece ha tutte le sue tabelle e strutture dati per cui è già diretto che un p.mangia() va subito sul mangia() di Studente e NON di Persona.
    Ma come è fatto a livello implementativo, NON è molto importante. Conta che si comprenda il concetto.

    Se ci fosse una ulteriore sottoclasse:

    codice:
    public class StudenteFuoriSede extends Studente {
    }

    Dove StudenteFuoriSede NON ridefinisce mangia(), se io faccio:

    Persona p = new StudenteFuoriSede();
    p.mangia();


    il mangia() eseguito è quello dell'oggetto realmente istanziato che è StudenteFuoriSede, che non ha un mangia() ma lo "eredita" da Studente. Quindi è comunque quello di Studente ad essere eseguito.

    Con l'override il metodo eseguito è sempre quello più "sotto" possibile, ridefinito o ereditato che sia.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #13

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.