Le interfacce, come le classi astratte, sono delle classi speciali che non possono essere istanziate ma soltanto implementate.
Praticamente esse delineano la struttura di una classe. La dichiarazione di un’interfaccia è simile a quella di una classe, ma include soltanto metodi (privi di implementazione) e costanti

quindi si vede che ho implementato solo dei metodi.
Poi in questa classe implemento i metodi precedenti:

in quest’ulteriore classe implemento nuovamente la stessa interfaccia:


Inoltre, dato che entrambe le classi implementano l’intefaccia IUser
, è possibile tramite i metodi setPartner
di ognuna, impostare un partner di tipo UserA
ad un’istanza di tipo UserB
e vice versa