Non è un virtuosismo e non va affatto oltre il polimorfismo. E' indispensabile in tutti quei casi in cui ti serve l'ereditarietà multipla (che in Java si attua proprio mediante le interfacce).

Un esempio è il caso di tutto ciò che è cliccabile: pulsanti, combo box, menu, ecc... sono tutte classi diverse che non necessariamente derivano dalla stessa classe madre (pensa alla differenza fra un pulsante e una combo box), ma tutte queste hanno qualcosa in comune: possono essere cliccate.
In realtà questa cosa non è data da un'interfaccia, ma potrebbe essere vista come tale: tutti hanno il metodo addActionListener().
Proprio partendo da questa piccola similitudine arriva l'esempio concreto: ActionListener. Questa interfaccia serve per accomunare diversi tipi di oggetti. Non importa di che tipo sia l'oggetto, limpotrante è che sia di tipo ActionListener, ovvero che preveda il metodo actionPerformed(). Questa è una proprietà garantita dall'implementazione dell'interfaccia: qualsiasi oggetto che implementa tale interfaccia deve prevedere un metodo con quel nome e che rispetta quella firma. A questo punto non interessa a nessuno sapere sel'oggetto passato è un pulsante, un pannello, un Vector o una classe diversa: sappiamo che implementa ActionListener e quindi prevede il metodo actionPerformed (che tutto ciò di cui ho bisogno per lavorarci).


Ciao.