Polimorfismo
Secondo il tipo di una variabile non determina in modo completo il tipo dell’oggetto a cui essa si riferisce. L’invocazione di un metodo è sempre determinata dal tipo dell’oggetto usato come parametro implicito, e NON dal tipo della variabile oggetto:
Variabile oggetto e interfaccia
La variabile oggetto (l’interfaccia) ci dice cosa si può fare con quell'oggetto (cioè quali metodi si possono utilizzare). L'oggetto ci dice come farlo (appartenente ad una certa classe).
Esempio
ESEMPIO: Comparable x;...
if (...) x = new BankAccount(1000);
else x = new String("");...
if (x.compareTo(y) > 0)
Se la condizione dell'if è vera, x contiene un riferimento ad un oggetto di tipo BankAccount, quindi il compilatore decide di invocare il metodo compareTo scritto in BankAccount.
Ordinamento di oggetti e l'interfaccia Comparable
L’interfaccia Comparable è definita nel pacchetto java.lang, per cui non deve essere importata né deve essere definita.
Definizione dell'interfaccia
public interface Comparable {
int compareTo(Object other);
}
Metodo di ordinamento
Come può Comparable definire un metodo di ordinamento valido per tutte le classi? Basta definire un metodo per ordinare un array di riferimenti ad oggetti che realizzano Comparable, indipendentemente dal tipo. Quindi tutti i metodi di ordinamento e ricerca che abbiamo visto per array di numeri interi possono essere riscritti per array di oggetti Comparable, basta usare le seguenti “traduzioni”:
-
Informatica
-
Informatica I - interfacce e implementazione di interfacce in java
-
Informatica
-
Informatica