Oppure

Loading
28/10/10 15:04
crashoverride
Ciao ragazzi, spero in un vostro aiuto... Sto studiando Java, c'era un paragrafo su i parametri poliformi ma non li ho capiti chi me li puoi spiegare semplicemente??
Grazie milleeee!
aaa
28/10/10 16:24
Il Totem
Io non conosco java nel dettaglio, ma cercando su google non c'è alcun riferimento a parametri poliformi. Forse ti riferisci a membri polimorfici?
aaa
28/10/10 16:37
crashoverride
No, sul libro c'è scritto propio Parametri Poliformi, ho cercato anche io su google ma non c'è niente :(
aaa
28/10/10 16:49
Il Totem
E cosa dice il libro di questi?
aaa
28/10/10 17:04
crashoverride
Sappiamo che i parametri in Java sono sempre passati per valore. Ciò implica che passare un parametro di tipo reference ad un metodo significa passare il valore numerico del reference, in altre parole il suo indirizzo. A quest’indirizzo potrebbe risiedere un oggetto istanziato da una sottoclasse, grazie al polimorfismo per dati. In un metodo, un parametro di tipo reference si dice parametro polimorfo quando, anche essendo di fatto un reference relativo ad una determinata classe, può puntare ad un oggetto istanziato da una sottoclasse. In pratica, sfruttando il polimorfismo per dati, un parametro di un metodo potrebbe in realtà puntare ad oggetti diversi.
È il caso del metodo println() che prende un parametro di tipo Object.
Il lettore ha già appreso precedentemente che tutte le classi (compresa la classe Punto) sono sottoclassi di Object. Quindi potremmo chiamare il metodo println() passandogli come parametro, anziché un’istanza di Object, un’istanza di Punto come p1. Ma a questo tipo di metodo possiamo passare un’istanza di qualsiasi classe, dal momento che vale il polimorfismo per dati ed ogni classe è sottoclasse di Object.

Ecco! :D
Non ho capito molto... :(
aaa
28/10/10 17:11
In pratica dice che il parametro che passi a un metodo puo puntare alla classe specificata nella dichiarazione del metodo oppure a una sottoclasse della classe specificata.
Sai che tutte le classi derivano dalla classe Object quindi (citando l'esempio del tuo manuale) al metodo printl() che prende in input un oggetto della classe Object puoi passare qualunque oggetto di qualsiasi classe dal momento che derivano appunto dalla classe Object.
28/10/10 21:32
Il Totem
Questa caratteristica dei linguaggi ad oggetti si chiama covarianza. Il suo opposto è la controvarianza, ossia passare tipi meno derivati al posto di parametri più derivati.

P.S.: era polimorfici, non poliformi :_doubt:
aaa
29/10/10 18:58
marcouio
Ti faccio un esempio: ipotizziamo tu stia creando un metodo che assegna una targa ad un'automobile. Ovviamente un parametro potrebbe essere proprio la macchina a cui assegnare la stringa "targa". Se tu impostassi nel metodo la richiesta di un parametro di tipo "AutoSportiva" probabilmente nel caso in cui dovresti assegnare la targa ad un oggetto "AutoUtilitaria" il metodo non l'accetterebbe. Invece se nella firma del metodo inserissi un parametro del tipo "Auto" usata per estendere tutte e due le classi precedentemente nominate allora potresti passare o l'uno o l'altro tipo indifferentemente nell'implementazione del metodo.

aaa