Interfacce
Cosa e un’interfaccia
Sezione intitolata “Cosa e un’interfaccia”Un’interfaccia descrive un comportamento che una classe promette di avere.
Non dice necessariamente come farlo. Dice quali metodi devono esistere.
Pensala come un contratto:
“se una classe implementa questa interfaccia, allora deve offrire questi metodi”.
Creare un’interfaccia
Sezione intitolata “Creare un’interfaccia”public interface Stampabile { void stampa();}Questa interfaccia richiede un metodo stampa.
Una classe che la implementa deve scrivere quel metodo.
implements
Sezione intitolata “implements”public class Documento implements Stampabile { private String titolo;
public Documento(String titolo) { this.titolo = titolo; }
@Override public void stampa() { System.out.println("Documento: " + titolo); }}implements Stampabile significa: Documento rispetta il contratto Stampabile.
Classi diverse, stesso comportamento
Sezione intitolata “Classi diverse, stesso comportamento”public class Foto implements Stampabile { private String nomeFile;
public Foto(String nomeFile) { this.nomeFile = nomeFile; }
@Override public void stampa() { System.out.println("Foto: " + nomeFile); }}Documento e Foto sono classi diverse, ma entrambe sanno stampare.
Usare il tipo interfaccia
Sezione intitolata “Usare il tipo interfaccia”Puoi usare l’interfaccia come tipo.
public class Esempio { public static void main(String[] args) { Stampabile a = new Documento("Contratto"); Stampabile b = new Foto("vacanza.jpg");
a.stampa(); b.stampa(); }}Output:
Documento: ContrattoFoto: vacanza.jpgIl programma non ha bisogno di sapere tutti i dettagli interni. Gli basta sapere che entrambi sono Stampabile.
Perche sono utili
Sezione intitolata “Perche sono utili”Le interfacce aiutano a scrivere codice flessibile.
Puoi dire: “mi serve qualcosa che sappia fare questa azione”, senza fissarti su una classe specifica.
Esempio:
public static void stampaOggetto(Stampabile oggetto) { oggetto.stampa();}Questo metodo funziona con qualunque classe che implementa Stampabile.
Interfacce ed ereditarieta
Sezione intitolata “Interfacce ed ereditarieta”Una classe Java puo estendere una sola classe:
public class Studente extends Persona {}Ma puo implementare piu interfacce:
public class Documento implements Stampabile, Salvabile {}Questo rende le interfacce molto utili per descrivere comportamenti comuni.
Regola pratica
Sezione intitolata “Regola pratica”Usa un’interfaccia quando classi diverse devono condividere lo stesso comportamento, anche se non appartengono alla stessa famiglia.
Documento e Foto non sono la stessa cosa. Pero entrambe possono essere stampabili.