MORENO SARDELLA · RECUPERO JAVA
← Tutte le lezioni
Lezione 7

LE INTERFACCE

Il contratto che una classe promette di rispettare. Definire e implementare interfacce, usarle come tipo e riusare gli algoritmi su classi diverse.

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”.

Pagabile.java
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).

riuso.java
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)
Quanteuna sola superclassepiu' interfacce insieme
Eredita codice?si', anche i metodi gia' scrittino, vanno scritti tutti
Relazione«e'-un»«sa-fare»
Quandoclassi imparentatedare 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 ↓

Interfacce - Esercizi basescarica ↓
Interfacce - Esercizi avanzatiscarica ↓