Ribadisco il concetto: con quel codice non vai ad istanziare un'interfaccia (questa cosa non avrebbe senso) ma
un oggetto di una classe anonima.
In sostanza il codice che hai scritto tu equivale al seguente:
public class ClasseTemporanea implements View.OnClickListener {
@Override
public void onClick(View v) {
....
}
}
Poiché, però, effettivamente non esiste nessuna classe chiamata "ClasseTemporanea" allora non potrai fare una cosa del tipo:
ClasseTemporanea obj = new ClasseTemporanea();
Per lo stesso motivo una classe anonima non ha un costruttore.
Qual è quindi il vantaggio di usare una classe anonima? Semplicemente se hai necessità di creare un oggetto che sai che non dovrai riutilizzare in seguito allora ti risparmi di dover creare una nuova classe (che sai già che userai per creare uno e un solo oggetto).
Questa cosa è particolarmente utile quando hai a che fare, ad esempio, con i listeners: in particolare il listener che andrai a creare per un componente (es un button) non dovrai utilizzarlo per altri componenti, per cui invece di andarti a creare una "classe normale" puoi velocizzare le cose andando a creare un oggetto di una classe anonima.
Su wikipedia: .
Oppure dal sito ufficiale di Java (in inglese):
http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html