Middle
In welchen Fällen sollte man eine Schnittstelle und in welchen eine abstrakte Klasse verwenden?
sobes.tech KI
Antwort von AI
Verwenden Sie Schnittstellen, um Verhaltensverträge zu definieren, die Klassen implementieren können. Dies ermöglicht Polymorphismus und verringert die Kopplung zwischen Klassen. Eine Klasse kann mehrere Schnittstellen haben, aber nur eine Basisklasse.
Verwenden Sie abstrakte Klassen, wenn Sie eine gemeinsame Implementierung eines Teils der Funktionalität haben und eine Grundstruktur für abgeleitete Klassen bereitstellen möchten. Abstrakte Klassen können abstrakte und normale Methoden sowie Felder enthalten. Sie sind geeignet, wenn Vererbung "ist" erforderlich ist.
| Merkmal | Schnittstelle | Abstrakte Klasse |
|---|---|---|
| Mehrfachvererbung | Ja | Nein |
| Implementierung | Nein (bis .NET 8 mit Standard-Interface-Methoden) | Ja, teilweise oder vollständig |
| Felder | Nein | Ja |
| Konstruktoren | Nein | Ja |
| Beziehungsart | "kann machen" ("has-a") | "ist" ("is-a") |
Beispiel für die Verwendung einer Schnittstelle:
// Definieren eines Vertrags für Objekte, die fliegen können
public interface IFlyable
{
void Fly();
}
// Die Flugzeugklasse implementiert die Schnittstelle IFlyable
public class Airplane : IFlyable
{
public void Fly()
{
// Flugzeugflug-Implementierung
Console.WriteLine("Das Flugzeug fliegt");
}
}
// Die Vogelklasse implementiert ebenfalls die Schnittstelle IFlyable
public class Bird : IFlyable
{
public void Fly()
{
// Vogel-Flug-Implementierung
Console.WriteLine("Der Vogel fliegt");
}
}
Beispiel für die Verwendung einer abstrakten Klasse:
// Abstrakte Klasse Tier mit allgemeiner Atem-Implementierung
public abstract class Animal
{
public void Breathe()
{
Console.WriteLine("Tier atmet");
}
// Abstrakte Methode, die von Unterklassen implementiert werden muss
public abstract void MakeSound();
}
// Konkrete Klasse Hund, die von Animal erbt
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Wuff!");
}
}
// Konkrete Klasse Katze, die von Animal erbt
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Miau!");
}
}