Sobes.tech
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!");
    }
}