Interfaces in Java - GeeksforGeeks
Interfaccia: una collezione di metodi public
senza implementazione, definita da una struttura specifica in Java.
public interface I {
public t1 m1(...);
//...
public t2 mn(...);
}
Sebbene simile a una class
, un’interfaccia presenta differenze fondamentali:
public
, non sono permessi metodi private
o protected
.In sintesi, un’interfaccia descrive cosa un oggetto sa fare, ma non come lo fa. Essa definisce un contratto che le classi che la implementano devono rispettare, fornendo poi l’implementazione concreta dei metodi.
INFO
Non è possibile creare direttamente un’istanza di un’interfaccia, poiché non contiene implementazioni concrete.
Esempio, data un’interfaccia I
:
I x = new I(); // -> ERRORE
Per poter utilizzare i metodi definiti in un’interfaccia, una classe deve dichiarare che la implementa, assumendosi la responsabilità di fornire le implementazioni concrete di tali metodi.
Esempio:
public class CI implements I {
// implementazione dei metodi di I
}
Quando una classe implementa un’interfaccia:
Esempio:
I A = new CI(); // A è un oggetto di tipo I che utilizza l'implementazione di CI
È possibile avere più implementazioni diverse della stessa interfaccia.
Esempio:
public interface I {
public int m1(int x);
}
public class CI1 implements I {
public int m1(int x) {
// implementazione specifica di CI1
}
public void m2() {
// un altro metodo specifico di CI1
}
}
public class CI2 implements I {
public int m1(int x) {
// implementazione specifica di CI2
}
}
// esempio di utilizzo
I A = new CI1(); // A è un oggetto di tipo I che usa l'implementazione di CI1
I B = new CI2(); // B è un oggetto di tipo I che usa l'implementazione di CI2
INFO
e sono sotto-tipi di , quindi rispettano il principio di sostituibilità.
int f(I x) {...}
f(A)
è valido.f(B)
è valido.int f(CI1 x) {...}
f(A)
è valido.f(B)
non è valido.Le interfacce sono strumenti fondamentali nella programmazione orientata agli oggetti per:
Tuttavia, è importante utilizzare le interfacce in modo ponderato: non tutte le classi necessitano di un’interfaccia dedicata, poiché un eccesso di interfacce può complicare inutilmente il design del software.