Une classe abstraite = classe que tu ne peux pas instancier car elle n'en a aucune utilité. Elle est faite pour être une base d'autres objets plus complexes qui vont en hériter.
Par exemple, instancier une classe "animal" n'a aucun sens que cela ne représente rien concrètement. Il est plus intéressant d'instancier des chiens, chats, humains,...
Mais tous ont des choses en commun que tu pourras déjà coder dans la classe abstraite Animal de laquelle ils vont tous hériter.
Une interface est une liste de méthodes qu'une classe est obligée d'implémenter.
Imagine le cas d'une télévision qui a besoin d'une télécommande.
Ta télé en a rien à cirer la marque de ta télécommande, sa couleur, son modèle,... Tout ce que ta télécommande doit faire pour en être une c'est changer de chaîne, allumer la TV, éteindre la TV,...
Les interfaces permettent donc à une classe d'en utiliser une autre peu importe son implémentation du moment qu'elle remplit certaines fonctionnalités.