Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Rplus
    Registrato dal
    Mar 2002
    Messaggi
    150

    polimorfismo, overriding, overloading

    ciao a tutti

    seppur sia un pò di tempo ormai che programmo in java, non mi sono mai posto questo problema: il concetto di polimorfismo racchiude in sè sia quello di overriding (sottoclassi che ridefiniscono metodi della superclasse) sia quello di overloading (metodi con lo stesso nome ma diversi parametri), o solo uno dei due (quale?) ??

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Ho spostato la discussione nel forum dedicato a Java.
    In futuro, poni qui le tue domande relative a questo linguaggio.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di Rplus
    Registrato dal
    Mar 2002
    Messaggi
    150
    ah okay..cmq è in generale una domanda sull'OOP, più che specifica per java..

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    generalmente quando si parla di polimorfismo si fa riferimento all'overriding di metodi

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    9
    Il polimorfismo è legato solo e soltanto all'overriding dei metodi, esso consiste nella capacità degli oggetti di reagire in modo diverso a messaggi uguali in base alla loro posizione nella gerarchia di ereditarietà, pertanto deve essere sempre risolto a runtime ed il compilatore si occupa di generare codice che permetta appunto di "risolvere" il problema a runtime tramite il processo del "late binding" (pensa ad una variabile Supertype a cui viene associato un oggetto SubtypeA o SubtypeB a seconda dell'esito di una condizione if/else...il compilatore (la java virtual machine in questo caso) non potrà mai sapere tale esito a tempo di compilazione e creerà il codice adatto a risolvere il problema a runtime, ovviamente pagando qualcosina in tempo di esecuzione)...

    Il polimorfismo legato all'overloading dei metodi è anche detto polimorfismo fittizio perchè la scelta del metodo da chiamare viene fatta a tempo di compilazione semplicemente guardando la firma del metodo (in JAVA in particolare la firma di un metodo non comprende il valore di ritorno ed una sottoclasse non può ridefinire un metodo di una superclasse con diverso valore di ritorno).

    Ovviamente in JAVA dichiarando un metodo final ci assicuriamo che non possa essere sovrascritto nelle sottoclassi, ma non solo: siccome un metodo definito in una sottoclasse "nasconde" quelli delle classi antenate ci assicuriamo che sia proprio quel metodo ad essere eseguito, pertanto tale metodo non è più virtuale e viene "risolto" a tempo di compilazione, guadagnando qualcosina in efficienza (e avendo la sicurezza che tale metodo non può essere sovrascritto).In JAVA i metodi di default sono virtuali.

    Saluti.

  6. #6
    Una domanda:

    Con l'overriding, si riscrive il corpo di un metodo, ma i parametri rimangono gli stessi o possono variare?

    L'overloading, si basa solo sul cambiamento di parametri?
    Perchè per esempio nelle classi si fa overloading del toString, e in quel caso non si prendono parametri ma si ridefinisce il corpo, quindi la differenza consiste nel fatto che l'overriding si applica al polimorfismo mentre l'overloading no?
    Però in entrambi possono essere modificati parametri e corpi dei metodi?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Darèios89
    Con l'overriding, si riscrive il corpo di un metodo, ma i parametri rimangono gli stessi o possono variare?
    Per l'override la "signature" del metodo deve restare la stessa. Con l'unica variante in più che da Java 5 si parla di signature "override equivalent" e di "subsignature". Perché entrano in gioco i generics.

    Se un metodo è es.:
    void unMetodo(List<String> lista)

    nella sottoclasse è legale fare l'override senza usare i generics, ovvero:
    void unMetodo(List lista)

    Originariamente inviato da Darèios89
    L'overloading, si basa solo sul cambiamento di parametri?
    Due metodi, per poter essere in overload devono avere parametri differenti. Non si possono insomma differenziare solo per il valore di ritorno o le eccezioni dichiarate o il livello di accesso.
    Tutte queste cose possono essere diverse tra 2 metodi in overload ... ma i parametri devono anche cambiare.

    Originariamente inviato da Darèios89
    Perchè per esempio nelle classi si fa overloading del toString
    No si fa l'override di toString().
    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.