Le interfacce sono uno strumento che Java mette a disposizione per consentire a più classi (anche molto diverse tra loro, slegate da relazioni is-A) di fornire e implementare un insieme di metodi comuni. Definiscono e standardizzano l’interazione fra oggetti tramite un insieme limitato di operazioni.

N.B.: Un metodo di default (pre implementato) in un’interfaccia non è sovrascrivibile.

Specificano solo le azioni/comportamenti che un oggetto può compiere, senza implementarle, quindi sono completamente astratte (se non definiamo metodi di default con la parola chiave default).

Sono classi che possono contenere soltanto:

  • Costanti
  • Metodi astratti (implicitamente public abstract)
  • Campi (public static final)
  • Metodi default e statici (da Java 8 in poi)
  • Metodi privati (da Java 9 in poi)

Non contengono costruttori e variabili locali.

N.B.: Le relazioni tra oggetti is-a del polimorfismo valgono anche per le interfacce, inoltre un’interfaccia ne può estendere un’altra.

Esempio

Interfaccia

public interface SupportoRiscrivibile
{
	int TIMES = 1000;
	void leggi();
	void sccrivi();
}

Classe che la implementa

public class Nastro implements SupportoRiscrivibile, altraInterfaccia, ancoraUnAltraInterfaccia, etc
 
{
	private Pellicola pellicola;
 
	@Override
	public void leggi()
	{
		...
	}
 
	@Override
	public void scrivi()
	{
		...
	}
}