Techniquement, les différences ne sont pas vraiment importantes mais, conceptuellement, ce sont des choses entièrement différentes et cela conduit aux différences techniques que d'autres ont mentionnées.
Une superclasse abstraite est exactement ce à quoi elle ressemble, c'est un type commun qui est partagé par de nombreux autres types, comme les chats et les chiens sont des animaux.
Une interface est également exactement ce à quoi elle ressemble, c'est une interface à travers laquelle d'autres classes peuvent communiquer avec l'objet. Si vous voulez faire un Cat Walk, ça va, car Cat implémente une interface CanWalk. Pareil pour un lézard, mais ils marchent très différemment. Un serpent, d'autre part, n'implémente pas CanWalk, vous ne pouvez donc pas lui dire de marcher. Pendant ce temps, Lizard et Snake (ou peut-être des sous-classes plus explicites - je ne suis pas un expert) pourraient tous deux se débarrasser de leur peau, et donc implémenter CanShed, tandis qu'un chat ne pourrait pas le faire.
Mais ils sont tous toujours des animaux et ont des propriétés communes, comme s'ils sont vivants ou morts.
C'est pourquoi toutes les méthodes d'une interface doivent être implémentées en tant que public (ou explicitement, en C #). Parce que quel est le point dans une interface qui est cachée de la classe d'interface avec l'objet? C'est aussi pourquoi vous pouvez avoir plusieurs interfaces vers un objet, même lorsqu'un langage ne prend pas en charge l'héritage multiple.
Pour revenir à votre question, lorsque vous la regardez de cette façon, il y a très rarement une raison d'avoir une superclasse entièrement abstraite.