Middle
In welke gevallen moet je een interface gebruiken en in welke een abstracte klasse?
sobes.tech AI
Antwoord van AI
Gebruik interfaces om het gedragcontract te definiëren dat klassen kunnen implementeren. Dit stelt je in staat polymorfisme te bereiken en vermindert de koppeling tussen klassen. Een klasse kan meerdere interfaces hebben, maar slechts één basisklasse.
Gebruik abstracte klassen wanneer je een gemeenschappelijke implementatie hebt van een deel van de functionaliteit en een basisstructuur wilt bieden voor afgeleide klassen. Abstracte klassen kunnen abstracte en normale methoden bevatten, evenals velden. Ze zijn geschikt wanneer er erfelijkheid "is".
| Kenmerk | Interface | Abstracte klasse |
|---|---|---|
| Meervoudige overerving | Ja | Nee |
| Implementatie | Nee (tot .NET 8 met standaard interface-methoden) | Ja, gedeeltelijk of volledig |
| Velden | Nee | Ja |
| Constructors | Nee | Ja |
| Relatietype | "kan doen" ("has-a") | "is" ("is-a") |
Voorbeeld van gebruik van interface:
// Definieer een contract voor objecten die kunnen vliegen
public interface IFlyable
{
void Fly();
}
// De klasse vliegtuig implementeert de interface IFlyable
public class Airplane : IFlyable
{
public void Fly()
{
// Implementatie van de vlucht van het vliegtuig
Console.WriteLine("Het vliegtuig vliegt");
}
}
// De klasse vogel implementeert ook de interface IFlyable
public class Bird : IFlyable
{
public void Fly()
{
// Implementatie van de vlucht van de vogel
Console.WriteLine("De vogel vliegt");
}
}
Voorbeeld van gebruik van abstracte klasse:
// Abstracte klasse Animal met algemene implementatie van ademhaling
public abstract class Animal
{
public void Breathe()
{
Console.WriteLine("Dier ademt");
}
// Abstracte methode die door afgeleide klassen moet worden geïmplementeerd
public abstract void MakeSound();
}
// Concrete klasse hond die erft van Animal
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Woef!");
}
}
// Concrete klasse kat die erft van Animal
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Miauw!");
}
}