Interfacce
Cos’è un’interfaccia
Sezione intitolata “Cos’è un’interfaccia”Un’interfaccia descrive un comportamento che una classe promette di offrire.
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 che 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 offrono lo stesso comportamento.
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.
Perché sono utili
Sezione intitolata “Perché sono utili”Le interfacce permettono di scrivere codice meno legato a una classe specifica.
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 ereditarietà
Sezione intitolata “Interfacce ed ereditarietà”Una classe Java può estendere una sola classe:
public class Studente extends Persona {}Ma può implementare più interfacce:
public class Documento implements Stampabile, Salvabile {}Questo le rende 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.