Le interfacce possono essere utilizzate:
- per definire Tipi di Dati
Astratti (visti nel corso di MP); si pensi
al TDA degli insiemi, definiti come entità matematiche
caratterizzate dalle usuali operazioni (unione,
appartenenza, ...), e a diverse possibili implementazioni del TDA (liste con/senza ripetizioni,
array, tabelle hash, alberi binari di ricerca, ...);
come contratto tra chi implementa una classe e chi la usa:
le due parti possono essere sviluppate e compilate separatamente;
per evidenziare funzionalità comuni a più classi,
sopperendo alle limitazioni dell'ereditarietà singola (come nell'esempio di
Comparable);
Interfacce e Classi Astratte
A prima vista potrebbe non essere chiara le necessità di disporre sia di interfacce che di classi astratte.
Si noti che:
- Una classe (astratta o concreta) può implementare più interfacce
ma estendere solo una classe (astratta o concreta)
- Una classe (astratta o concreta) può essere usata per "fattorizzare" codice comune alle sue sottoclassi,
una interfaccia non può contenere codice
- Una classe astratta può contenere chiamate di metodi astratti
prescindendo dalla loro implementazione, una classe concreta
non può usare metodi astratti,
una interfaccia non può contenere codice
|