Différence entre classe abstraite et interface

Dupliquer possible:
Interface vs classe de base

Je ne comprends pas la différence entre une classe abstraite et une interface. Quand dois-je utiliser quel art de type?

Lorsque nous créons une interface , nous créons essentiellement un ensemble de méthodes sans aucune implémentation qui doit être remplacée par les classes implémentées. L’avantage est que cela permet à une classe de faire partie de deux classes: une de la hiérarchie d’inheritance et une de l’interface.

Lorsque nous créons une classe abstraite , nous créons une classe de base pouvant avoir une ou plusieurs méthodes complétées, mais au moins une ou plusieurs méthodes sont laissées inachevées et déclarées abstraites. Si toutes les méthodes d’une classe abstraite sont inachevées, alors c’est identique à une interface. Le but d’une classe abstraite est de fournir une définition de classe de base indiquant le fonctionnement d’un ensemble de classes dérivées, puis de permettre aux programmeurs de remplir l’implémentation dans les classes dérivées.

article along with the demo project discussed Interfaces versus Abstract classes.

Essayez de penser comme ça:

Une classe abstraite crée une relation “est-une”. Volkswagon est une voiture.

Une interface crée une relation “can-do”. Fred peut IDrive.

De plus, Fred peut IDrive, mais Fred est une personne.

Une classe abstraite est une classe probablement avec des méthodes abstraites et des méthodes non abstraites. Ils font des choses (ont un code associé). Si une nouvelle classe non abstraite, la classe abstraite est sous-classe, elle doit implémenter les méthodes abstraites.

C’EST À DIRE

 public abstract class A { public ssortingng sayHi() { return "hi"; } // a method with code in it public abstract ssortingng sayHello(); // no implementation } public class B : A { // must implement, since it is not abstract public override ssortingng sayHello() { return "Hello from B"; } } 

L’interface s’apparente davantage à un protocole. Liste des méthodes qu’une classe implémentant cette interface doit avoir. Mais ils ne font rien. Ils ont juste des prototypes de méthodes.

 public interface A { ssortingng sayHi(); // no implementation (code) allowed ssortingng sayHello(); // no implementation (code) allowed } public class B : A { // must implement both methods ssortingng sayHi() { return "hi"; } ssortingng sayHello() { return "hello"; } } 

Les deux sont souvent confondus car il n’y a pas de protocole / interface en C ++ . Ainsi, la manière de simuler un comportement d’interface dans ce langage consiste à écrire une classe virtuelle pure (une classe avec uniquement des fonctions virtuelles).

 class A { virtual int a() = 0; // pure virtual function (no implementation) }