Se conoscessi il C++ potrei dirti che le interfacce sono come le classi con solo metodi virtuali puri.
C'è talmente tanto online su cosa sono e quando si usano queste classi che mi sembra uno spreco chiederlo su un forum.
Un utilizzo "classico" è quello di stabilire un contratto fra varie parti del programma, solitamente tra la parte centrale e i "plugin" o tutte quelle parti sviluppate in seguito dall'utente che utilizza il programma/libreria.
Non sto a ripetere le stesse cose, prova a leggere qui per esempio:
http://www.mokabyte.it/1999/10/interfacce.htm
Un altro utilizzo classico è quello per implementare i meccanismi di callback, vedi:
http://www.javaworld.com/javatips/jw-javatip10.html

Rispondi quotando