PDA

View Full Version : [JAVA] Polimorfismo dati e parametri polimorfi


Maggot_xD
27-06-2014, 15:37
Ciao a tutti. Ho cominciato qualche giorno fa a prendere in mano Java (primo linguaggio, se non si considera il Pascal fatto anni fa alle superiori) e, anche se tutto sommato procede bene, ho qualche dubbio (perciò perdonatemi se dico castronerie) in particolar modo sull'argomento polimorfismo. L'overload e l'override credo di averli capiti bene (cosa sono, come si implementano) ma non riesco proprio a capire come possano essere utilizzati i parametri polimorfi. Da quanto ho capito con il polimorfismo per dati possono istanziare un oggetto di una sottoclasse usando come reference la superclasse, ottenendo così un oggetto che ha accesso agli attributi e metodi pubblici della superclasse (ma non della sottoclasse) e già qui mi perdo (perché istanziare con il reference della superclasse, per poi dover fare il casting di oggetti per poter accedere ai metodi/attributi pubblici della sottoclasse?). Con i parametri polimorfi (sempre se ho capito bene) dovrei poter passare a un metodo un qualsiasi oggetto (anche non istanziato dalla sua stessa classe). La mia domanda è: in quali occasioni possono tornare utili? Qualcuno può farmi un esempio concreto di un'applicazione reale in cui applicare efficientemente i parametri polimorfi?

Ah giusto per informazione, 'sto usando il manuale gratuito di Claudio De Sio Cesari, che mi sembra ottimo, ma il codice di esempio è sempre spezzettato e poco chiaro per me.

Daniels118
30-06-2014, 09:06
perché istanziare con il reference della superclasse, per poi dover fare il casting di oggetti per poter accedere ai metodi/attributi pubblici della sottoclasse?
Se i metodi della sottoclasse sovrascrivono quelli della superclasse non c'è bisogno di fare il casting, ed è proprio qui che sta l'utilità.
Immagina ad esempio di dover realizzare un'applicazione che si interfaccia con un database. Ciascun database ha un proprio driver che implementa il protocollo di comunicazione con quel database specifico. Supponiamo che tu non conosca a priori quale tipo di database avrai a disposizione e pertanto non sai quale driver dovrai utilizzare, di conseguenza non ne conoscerai nemmeno i metodi.
Ma se tutti i driver fossero l'implementazione specifica per i rispettivi database di uno standard unificato? Allora non dovremmo più riscrivere la nostra applicazione per ogni database possibile, ma sarà sufficiente assegnare l'istanza del driver specifico ad una variabile dichiarata come superclasse dei driver. Tale variabile avrebbe esattamente gli stessi metodi implementati dai driver specifici e non sarebbe necessario alcun cast per richiamarli.