01
Un contratto
Che cos'e' un'interfaccia
Un'interfaccia elenca dei metodi senza scriverne il corpo: e' un contratto. Una classe che la implements si impegna a fornire tutti quei metodi. Non contiene dati, solo “cosa si deve saper fare”.
interface Pagabile { double getImporto(); // nessun corpo: solo la firma } class Fattura implements Pagabile { // Fattura rispetta il contratto private double prezzo; private int quantita; Fattura(double p, int q) { prezzo = p; quantita = q; } public double getImporto() { return prezzo * quantita; } // implementazione obbligatoria }
02
Perche' servono
Usare l'interfaccia come tipo
La cosa potente: posso usare il nome dell'interfaccia come tipo di una variabile o di un array. Un algoritmo scritto su Pagabile funziona per qualunque classe che rispetti il contratto, anche classi diversissime tra loro (impiegati e fatture insieme).
Pagabile[] lista = {
new ImpiegatoSalariato("Rossi", 2500),
new Fattura(10.0, 3)
};
double totale = 0;
for (Pagabile p : lista)
totale += p.getImporto(); // non importa CHE classe sia: ha getImporto()03
Ereditarieta' o interfaccia?
Due strade diverse
| extends (classe) | implements (interfaccia) | |
|---|---|---|
| Quante | una sola superclasse | piu' interfacce insieme |
| Eredita codice? | si', anche i metodi gia' scritti | no, vanno scritti tutti |
| Relazione | «e'-un» | «sa-fare» |
| Quando | classi imparentate | dare un comportamento comune a classi scollegate |
Nella verifica il tipo comune (Pagabile, Misurabile) e' un'interfaccia: e' cio' che permette di mettere impiegati e fatture nello stesso array e calcolarne l'importo in modo uniforme.
01
Massimo via interfaccia
Definisci interface Confrontabile { int confronta(Object o); } e trova il massimo in un array di Confrontabile.
Mostra soluzione
interface Confrontabile { int confronta(Object o); }
Confrontabile max = arr[0];
for (Confrontabile c : arr)
if (c.confronta(max) > 0) max = c;
Esercizi sulle interfacce ↓