web-dev-qa-db-fra.com

Quand utiliser des classes abstraites?

Voici l'article MSDN sur classes abstraites , mais je ne comprends vraiment pas ...

Quand dois-je vraiment utiliser des classes abstraites? Quels sont les avantages d'utiliser des classes abstraites?

77
bala3569

Les classes abstraites sont utiles lorsque vous avez besoin d'une classe à des fins d'héritage et de polymorphisme, mais cela n'a aucun sens d'instancier la classe elle-même, uniquement ses sous-classes. Ils sont couramment utilisés lorsque vous souhaitez définir un modèle pour un groupe de sous-classes qui partagent un code d'implémentation commun, mais vous voulez également garantir que les objets de la superclasse ne peuvent pas être créés.

Par exemple, disons que vous devez créer des objets Chien, Chat, Hamster et Poisson. Ils possèdent des propriétés similaires comme la couleur, la taille et le nombre de pattes ainsi que le comportement, vous créez donc une superclasse animale. Cependant, quelle couleur est un animal? Combien de pattes a un objet Animal? Dans ce cas, il n'a pas beaucoup de sens d'instancier un objet de type Animal mais uniquement ses sous-classes.

Les classes abstraites présentent également l'avantage supplémentaire du polymorphisme, vous permettant d'utiliser le type de la superclasse (abstraite) comme argument de méthode ou type de retour. Si par exemple vous aviez une classe PetOwner avec une méthode train () vous pouvez la définir comme prenant un objet de type Animal par ex. former (Animal a) plutôt que de créer une méthode pour chaque sous-type d'Animal.

136
richard

En utilisant des classes abstraites, nous pouvons rendre la classe plus générique.

Par exemple: si la classe A est une classe abstraite et qu'il existe des classes classe B, classe C et classe D étendant la classe abstraite A, ces sous-classes hériteront d'une méthode qui est déjà déclarée dans la classe abstraite A, rendant ainsi la méthode plus générique.

6
Vivek Saurabh

Vous les utilisez pour des classes qui ne seront jamais créées (donc n'existent pas vraiment), mais vous voulez en hériter pour des raisons de polymorphisme.

4
Puppy

Utilisez des classes abstraites lorsque vous définissez le comportement d'une classe de votre hiérarchie de classe qui ne sera jamais utilisée pour instancier directement un objet.

Alors, pensez-vous un instant à Dieu. Vos classes CBabyBoy et CBanyGirl ne seraient pas abstraites - car ce sont des objets solides qui sont créés. D'un autre côté, vos classes CPerson et CAnimal SERONT abstraites - elles sont utiles du point de vue de la hiérarchie des types, mais vous n'exécuterez jamais CAnimal Dingbat = new Animal();

3
Martin Milan

Richard a fourni n exemple où une classe abstraite a des avantages sur les classes non abstraites.

Je voudrais ajouter une table de faits pour choisir entre une classe abstraite et une interface. L'image peut être trouvée ici .

enter image description here

3
Anton Lyhin

Fondamentalement, vous devez utiliser une classe abstraite, lorsqu'une entité de votre hiérarchie aura logiquement des méthodes qu'elle ne sait pas comment implémenter, mais que ses descendants en ont. Il y a des milliards d'exemples "réels" sur le Web, vraiment)

2
n535