Interfacce e Metodi Statici in Java
- In un'interfaccia, i metodi possono essere dichiarati come
static. - I metodi
staticin un'interfaccia possono essere chiamati senza creare un'istanza dell'interfaccia. - I metodi
staticin 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();
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();
Nessuna istanza richiesta
Come accennato, non è necessaria alcuna implementazione o istanza di MiaIF per chiamare ottieniNumeroPredefinito() perché è static.
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.