La realizzazione di un software complesso richede la sua suddivisione in mattoncini logici indipendenti, la realizzazione di ogni mattoncino, e l'utilizzo di ogni mattoncino in modo coordinato.
Ogni mattoncino non sa nulla dell'esistenza degli altri mattoncini.
Chi utilizza i mattoncini per realizzare la sua applicazione, non e' interessaro a come sono fatti, ma solo a che cosa fanno.
Ora, che cosa fa un mattoncino e' descritto dalla sua interfaccia, come lo fa dalla classe che implementa quell'interfaccia.
Chi usa i mattoncini, guarda solo le interfacce.
Quindi, @aerox1, il tuo ragionamento e' giusto, ma anche sbagliato: chi implementa l'interfaccia play non deve saper nulla, e non gli deve interessare, se ci sara' o meno un'interfaccia grafica: potrebbe anche non esserci del tutto!
Invece, se vuole che l'oggetto che implementa quell'interfaccia, possa collocquiare con il mondo esterno, lo fa attraverso un'altro meccanismo: il meccanismo dei listener.
Un listener e' una lista di oggetti, che implementano una specifica interfaccia (definita dal mattoncino che si sta implementando), i cui metodi vengono chiamati quando avvengono specifiche situazioni: inizio del brano, e' passato 1 secondo, e' stato eseguito l'1% del brano, .... fine del brano.
Ora, chi vuole ricevere delle notifiche associate a tali eventi, deve implementare una classe, che implementa l'interfaccia associata al listener, istanzia un oggetto di quella classe e lo registra nel listener del mattoncino interessato.
Ed ecco che il gioco e' fatto.
Sembra un po' incasinato? Si e' vero, ma e' estremamente flessibile e potente. Ed una volta compreso, ci si accorge che non e' poi cosi' incasinato, anzi, e' molto elegante.
Il concetto di interfaccia e' fondamentale nella realizzazione di applicazioni un minimo complesse, perche' aiuta a mantenere separate, e quindi mantenibili separatamente, le varie parti dell'applicazione.
Ma quello descritto e' solo uno dei tanti casi in cui le interfacce sono fondamentali.
Infine, ho scritto mattoncini e non classi, per forzare l'idea che non e' detto che a implementare il mattoncino ci sia una sola classe, ma potrebbero esserci piu' classi e altre interfacce