Interfacce

  • Sono uno strumento che Java mette a disposizione per consentire a piĂą classi di fornire e implementare un insieme di metodi comuni

  • Definiscono e standardizzano l’interazione tra oggetti tramite un insieme limitato di operazioni

  • Esse specificano soltanto il comportamento che un certo oggetto deve presentare all’esterno, cioè cosa quell’oggetto può fare

  • L’implementazioe di tali operazioni, cioè come queste vengono tradotte e realizzate, rimane invece non definito

Metodi di default e metodi statici (java 8)

  • E’ possibile specificare delle implementazioni di default di metodi non statici
    • Mediante la parola chiave default
    • La motivazione principale per i metodi di default nelle interfacce è dovuta all’estensione di interfacce rilasciate in precedenza con i nuovi metodi senza rompere il contratto con il codice che utilizza le versioni precedenti
  • E implementazioni di metodi statici
    • I metodi statici non godono del polimorfismo
    • Sono metodi di utilitĂ  non associati alle singole istanze

Metodi privati

  • Per facilitare il riuso del codice, da Java 9 è possibile definire metodi provati all’interno di un’interfaccia
public interface Loggabile
{
	private void log(String msg, LogLevel level)
	{
		//codice per il logging
	}
 
	default void logInfo(String msg) {log(msg, LogLevel.INFO);}
	default void logWarn(String msg) {log(msg, LogLevel.WARN);}
	default void logError(String msg) {log(msg, LogLevel.ERROR);}
	default void logFatal(String msg) {log(msg, LogLevel.FATAL);}
}

Dichiarazioni di un’interfaccia

  • Un’interfaccia è una classe che può contenere soltanto

    • Costanti
    • Metodi astratti
    • Java 8: Implementazioni di default di metodi e metodi statici
    • Java 9: metodi privati tipicamente da invocare in metodi di default
  • Tutti i metodi dichiarati in un’interfaccia sono implicitamente public abstract

  • Tutti i campi dichiarati in un’interfaccia sono implicitamente public static final

  • Tranne nel caso dei metodi di default o statici, non è possibile specificare alcun dettaglio implementativo

    • Tranne nel caso dei metodi di default o statici, non è possibile specificare alcun dettaglio implementativo

  • Le interfacce permettono di modellare comportamenti comuni a classi che no sono necessariamente in relazione gerarchica

L’interfaccia java.util.Iterator <E>

  • E’ un’interfaccia fondamentale che permette di iterare su collezioni

  • Espone tre metodi:

  • E’ in relazione con l’interfaccia Iterable nel senso che chi implementa Iterable restituisce un Iterator sull’oggetto-collezione