Concetti Chiave
- L'overloading consente di avere più metodi con lo stesso nome, differenziati dai parametri, come .saldo() e .saldo(int x).
- In Java, la compatibilità tra classi implica che un oggetto di una sottoclasse è strettamente compatibile con la sua superclasse.
- Il tipo a Compile-Time è quello dichiarato nel codice sorgente, mentre il tipo a Run-Time è determinato durante l'esecuzione dell'applicazione.
- Il cast di oggetti nell'ereditarietà richiede di anteporre il nuovo tipo per accedere a metodi specifici delle sottoclassi.
- Un esempio di casting è l'uso di "((Macchina)v).segnala();" per richiamare un metodo di una sottoclasse partendo dall'oggetto di una superclasse.
L’overloading è quel processo che permette di avere più metodi con lo stesso nome ma differenziati tra loro in base ai parametri tra (). E’ per questo motivo che è possibile avere il metodo .saldo() e il metodo .saldo(int x) e quando li richiamerò dovrò prestare attenzione ad utilizzare uno piuttosto che l’altro. L’overloading può avvenire anche per i costruttori in quanto metodi.
Qual è la compatibilità tra classi?
Dati due oggetti A e B, con B sottoclasse di A, si dice che A è Compatibile con B e B è Strettamente Compatibile con A.
Un altro concetto importante nell’ereditarietà in Java è il significato di Run-Time e Compile-Time. Il tipo a Compile-Time di una espressione, è il tipo dell’espressione come dichiarato formalmente nel codice sorgente mentre il tipo a Run-Time è il tipo dell’espressione determinato durante l’esecuzione dell’applicazione. Questi due diversi tipi sono riscontrabili nel seguente codice:
ES. Veicolo v = new Macchina ();
Veicolo a compile-time e Macchina a run-time
Esempio di cast di oggetti
Riguardo il Cast di oggetti nell’ereditarietà si procede come solito infatti basta semplicemente anteporre il nuovo tipo. Ossia:
ES. Macchina fiat = new Macchina ();
Veicolo v = fiat;
fiat.segnala(); // segnala è un metodo di Macchina non applicabile ad uno Veicolo
((Macchina)v).segnala();
Domande da interrogazione
- Cos'è l'overloading e come si applica ai metodi in Java?
- Qual è la differenza tra compatibilità a compile-time e run-time in Java?
- Come si effettua il cast di oggetti nell'ereditarietà in Java?
L'overloading è un processo che consente di avere più metodi con lo stesso nome, differenziati in base ai parametri. Ad esempio, è possibile avere il metodo .saldo() e il metodo .saldo(int x), richiedendo attenzione nel loro utilizzo (come indicato nel testo).
La compatibilità a compile-time si riferisce al tipo dichiarato nel codice sorgente, mentre la compatibilità a run-time è il tipo determinato durante l'esecuzione. Questo è illustrato dall'esempio in cui un oggetto di tipo Veicolo è istanziato come Macchina (come descritto nel testo).
Il cast di oggetti si effettua anteponendo il nuovo tipo all'oggetto. Ad esempio, si può assegnare un oggetto Macchina a una variabile di tipo Veicolo e successivamente utilizzare il cast per accedere ai metodi specifici della classe Macchina (come spiegato nel testo).