Les interface c'est utile car ça te garantir que les classes qui implémentent l'interface auront déclaré du code pour les méthodes décrites dans l'interface.
Aussi, le fait de manipuler des interfaces au lieu de classes fait que le code qui manipule des interfaces n'aura pas à changer chaque fois qu'un ajoute ou qu'on supprime ou qu'on modifie le code d'une classe qui implémente l'interface.
Si tu avais jeté à la poubelle l'interface, tu es bon pour devoir identifier à l'avance toutes les classes que tu auras à gérer un jour, ce qui n'est pas possible.
Exemple :
Une console de jeu vidéo PS3, permet de lancer des jeux PS3 peu importe s'ils sont différents les uns des autres, tant qu'ils implémentent l'interface JeuPS3
qui contient les méthodes "lancer()", "sauver()", "arrêter()", et "mettreAJour()" par exemple :p
Les développeurs de jeux de n'importe quel éditeur fourniront sur chaque nouveau jeu la classe qui correspond au jeu. la classe KillZone pour Killzone, etc. Killzone implémentant l'interface JeuPS3, il pourra tourner sur la PS3 qui a pourtant été créée bien avant, car la console ne manipule pas des classes mais des interfaces
et donc fonctionne indépendemment de l'implémentation des classes qui implémentent JeuPS3
Bon concrètement je crois pas que les classes Killzone et interface JeuPS3 existent
mais bon, c'est l'idée.