ePrometeusCorsoJavaJava
testi articoli
Testi Articoli  Download
Home | Basi | Espressioni | Comandi | Classi | Ereditarieta | Eccezioni | Thread | Utilita | 
CorsoJava è ora Video! Free for all!
Clicca Qui!

Classi
OOP
Ereditarietà
Polimorfismo
Chiamata
Classi
Record
Istanze
Costruttori
Campi
this
Allocazione
Più costruttori
this()
Inizializzazioni
Riferimenti
Ordine
Metodi
Invocazione
Overloading
Attenzione
Finalizzazione
Static e Final
Campi statici
Blocco static
Metodi statici
Visibilità
Costanti
Package
import
import *
Classpath
L'interprete
Zip e Jar

<<< Chiamata >>>
Variabile e Istanza

Vediamo in pratica come questa cosa viene realizzata. Abbiamo una classe derivata, nel nostro caso il pesce rosso.quando una classe è derivata da una da una classe base, mantiene a tutti gli effetti le caratteristiche della classe base. Di conseguenza, è possibile assegnare a variabili che hanno il tipo della classe base, istanza che sono in realtà classi derivate.

Pesce p =
 new PesceRosso()

Possiamo vedere un esempio che è in Java una cosa comunissima. Creo un pesce rosso, ma lo assegno ad una variabili del tipo pesce. Questo è del tutto lecito: infatti il pesce rosso è a tutti gli effetti ancora un pesce, e pertanto può essere assegnata a variabili di tipo pesce.

Chiamata
p.nuota()

Abbiamo però un caso particolare che dobbiamo capire bene: cosa succede quando viene chiamato il metodo nuota() attraverso questa variabile. Notare bene che la variabile è di un tipo, ma punta ad un oggetto che di un altro tipo. Abbiamo il metodo nuota() sia nella classe Pesce, che un metodo nuota() nella classe PesceRosso. Quale dei due viene invocato?

Chiama la nuota di PesceRosso

La risposta sta nel polimorfismo: abbiamo detto che un oggetto risponde di autonomia alle richieste che gli vengono fatte, di modo che a richieste generiche, corrispondono comportamenti specifici. In realtà, questo è un meccanismo per riutilizzare più possibile codice esistente, avendo possibilità, quando il codice esistente non è esattamente come serve, di modificarlo, cambiando qualcuno dei metodi. Nel ostro caso particolare, il risultato dell'invocazione del metodo nuota() usando p causa la chiamata del metodo nuota di PesceRosso. In generale, gli oggetti si comportano in base a ciò che sono (ovvero l'oggetto effettivo che è stato stanziato), non in base ciò che sembrano (la variabile con il quale vengono invocati). Fare attenzione che questo comportamento non è scontato, e non è nemmeno semplice da realizzare: si ottiene infatti tramite il mantenimento di puntatore a funzioni,che possono venire rimpiazzato nel corso dell'esecuzione. Ma non approfondiremo per il momento più di tanto l'argomento, rimandando alle slide specifiche che incontreremo via via.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com