Middle
Dans quels cas doit-on utiliser une interface et dans quels cas une classe abstraite?
sobes.tech IA
Réponse de l'IA
Utilisez des interfaces pour définir le contrat de comportement que les classes peuvent implémenter. Cela permet d'atteindre le polymorphisme et d'alléger le couplage entre les classes. Une classe peut avoir plusieurs interfaces, mais une seule classe de base.
Utilisez des classes abstraites lorsque vous avez une implémentation commune d'une partie de la fonctionnalité et que vous souhaitez fournir une structure de base pour les classes dérivées. Les classes abstraites peuvent contenir des méthodes abstraites et normales, ainsi que des champs. Elles conviennent lorsque l'héritage "est" requis.
| Caractéristique | Interface | Classe abstraite |
|---|---|---|
| Héritage multiple | Oui | Non |
| Implémentation | Non (jusqu'à .NET 8 avec méthodes d'interface par défaut) | Oui, partielle ou complète |
| Champs | Non | Oui |
| Constructeurs | Non | Oui |
| Type de relation | "peut faire" ("has-a") | "est" ("is-a") |
Exemple d'utilisation d'une interface:
// Définir un contrat pour les objets pouvant voler
public interface IFlyable
{
void Fly();
}
// La classe avion implémente l'interface IFlyable
public class Airplane : IFlyable
{
public void Fly()
{
// Implémentation du vol de l'avion
Console.WriteLine("L'avion vole");
}
}
// La classe oiseau implémente également l'interface IFlyable
public class Bird : IFlyable
{
public void Fly()
{
// Implémentation du vol de l'oiseau
Console.WriteLine("L'oiseau vole");
}
}
Exemple d'utilisation d'une classe abstraite:
// Classe abstraite Animal avec une implémentation commune de la respiration
public abstract class Animal
{
public void Breathe()
{
Console.WriteLine("L'animal respire");
}
// Méthode abstraite que doivent implémenter les classes dérivées
public abstract void MakeSound();
}
// Classe concrète de chien héritant de Animal
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Wouf!");
}
}
// Classe concrète de chat héritant de Animal
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Miaou!");
}
}