Interfacce e Metodi Statici in Java

Concetti Chiave
  • In un'interfaccia, i metodi possono essere dichiarati come static.
  • I metodi static in un'interfaccia possono essere chiamati senza creare un'istanza dell'interfaccia.
  • I metodi static in un'interfaccia non sono ereditati dalle classi che implementano l'interfaccia o dalle sottointerfacce.

Utilizzare metodi statici in un'interfaccia

Un'altra funzionalità aggiunta alle interfacce con JDK 8 è la possibilità di definire uno o più metodi static.

Come i metodi static in una classe, un metodo static definito in un'interfaccia può essere chiamato indipendentemente da qualsiasi oggetto.

Pertanto, non è necessaria alcuna implementazione dell'interfaccia, e non è richiesta alcuna istanza dell'interfaccia per chiamare un metodo static. Invece, un metodo static si chiama specificando il nome dell'interfaccia, seguito da un punto, seguito dal nome del metodo.

Ecco la forma generale:

NomeInterfaccia.nomeMetodoStatico();
Consiglio

Somiglianza con i metodi statici nelle classi

Si noti che questo è simile al modo in cui viene chiamato un metodo static in una classe.

Di seguito è mostrato un esempio di metodo static in un'interfaccia aggiungendone uno a MiaIF, mostrata nella sezione precedente. Il metodo static è ottieniNumeroPredefinito(). Restituisce zero.

public interface MiaIF {
    // Questa è una dichiarazione di metodo di interfaccia "normale".
    // NON definisce un'implementazione predefinita.
    int ottieniNumero();

    // Questo è un metodo predefinito. Si noti che fornisce
    // un'implementazione predefinita.
    default String ottieniStringa() {
        return "Stringa Predefinita";
    }

    // Questo è un metodo statico di interfaccia.
    static int ottieniNumeroPredefinito() {
        return 0;
    }
}

Il metodo ottieniNumeroPredefinito() può essere chiamato, come mostrato qui:

int numPredefinito = MiaIF.ottieniNumeroPredefinito();
Consiglio

Nessuna istanza richiesta

Come accennato, non è necessaria alcuna implementazione o istanza di MiaIF per chiamare ottieniNumeroPredefinito() perché è static.

Nota

Metodi statici non ereditati

Un'ultima osservazione: i metodi statici di interfaccia non sono ereditati né da una classe che implementa l'interfaccia, né da una sottointerfaccia.