Classes Abstraites
1. Ne peut pas être instanciée indépendamment de ses classes dérivées. Les constructeurs des classes abstraites sont appelés uniquement par leurs classes dérivées.
2. Définissent des signatures de membres abstraites que les classes de base doivent implémenter.
3. Sont plus extensibles que les interfaces, sans rompre la compatibilité de version. Avec les classes abstraites, il est possible d'ajouter des membres non abstraits supplémentaires que toutes les classes dérivées peuvent hériter.
4. Peut inclure des données stockées dans des champs.
5. Permettent d'avoir des membres (virtuels) avec une implémentation et, par conséquent, fournissent une implémentation par défaut d'un membre à la classe dérivée.
6. Dériver d'une classe abstraite utilise l'unique option de classe de base d'une sous-classe.
Interface
1. Ne peut pas être instanciée.
2. L'implémentation de tous les membres de l'interface se fait dans la classe de base. Il n'est pas possible d'implémenter seulement certains membres dans la classe d'implémentation.
3. Étendre les interfaces avec des membres supplémentaires rompt la compatibilité de version.
4. Ne peut stocker aucune donnée. Les champs peuvent être spécifiés uniquement dans les classes dérivées. La solution de contournement consiste à définir des propriétés, mais sans implémentation.
5. Tous les membres sont automatiquement virtuels et ne peuvent inclure aucune implémentation.
6. Bien qu'aucune implémentation par défaut ne puisse apparaître, les classes implémentant des interfaces peuvent continuer à dériver les unes des autres.