Interfacce e Metodi Statici in Java
- 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();
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.