C# Vererbung: Wiederverwendbaren & wartbaren Code erstellen
Vererbung Grundlagen
Vererbung erlaubt eine neue Klasse (abgeleitete Klasse) basierend auf einer bestehenden Klasse (Basisklasse) zu definieren. Die abgeleitete Klasse erbt Member (Felder, Methoden, Properties) der Basisklasse und kann diese erweitern oder überschreiben.
Modelliert die IST-EIN (IS-A) Beziehung: Hund IST-EIN Säugetier IST-EIN Tier.
Syntax
class BaseClass { ... }
class DerivedClass : BaseClass { ... }
Beispiel: Shape & Rectangle
public class Shape
{
protected int Width, Height; // protected: für abgeleitete Klassen sichtbar
public void SetWidth(int w) => Width = w;
public void SetHeight(int h) => Height = h;
}
public class Rectangle : Shape
{
public int GetArea() => Width * Height;
}
// Nutzung
var rect = new Rectangle();
rect.SetWidth(5);
rect.SetHeight(7);
Console.WriteLine($"Area: {rect.GetArea()}"); // 35
Basisklassen-Konstruktor aufrufen
Über base(parameter) in der Initialisierungsliste des abgeleiteten Konstruktors:
public class Rectangle
{
protected double Length, Width;
public Rectangle(double l, double w) { Length = l; Width = w; }
public double GetArea() => Length * Width;
}
public class Tabletop : Rectangle
{
private double CostPerUnit = 70;
public Tabletop(double l, double w) : base(l, w) { } // Basis-Konstruktor
public double GetCost() => GetArea() * CostPerUnit;
public void Display()
{
Console.WriteLine($"Length: {Length}, Width: {Width}, Area: {GetArea()}, Cost: {GetCost()}");
}
}
Mehrfachvererbung
C# unterstützt keine Mehrfachvererbung von Klassen. Stattdessen: Interfaces (eine Klasse kann beliebig viele Interfaces implementieren).
Beispiel: Interface als Vertrag
public interface IPaintCost
{
int GetCost(int area);
}
public class Rectangle : Shape, IPaintCost
{
public int GetArea() => Width * Height;
public int GetCost(int area) => area * 70;
}
// Nutzung
var rect = new Rectangle();
rect.SetWidth(5); rect.SetHeight(7);
int area = rect.GetArea();
Console.WriteLine($"Area: {area}, Paint Cost: ${rect.GetCost(area)}");
Wichtige Regeln
privateMember der Basisklasse sind in der abgeleiteten Klasse nicht direkt zugreifbar (aber über öffentliche/geschützte Member erreichbar).- Konstruktoren werden nicht vererbt.
- Eine Klasse kann nur eine Basisklasse haben, aber beliebig viele Interfaces.
sealedKlasse verhindert Vererbung.virtual/overridefür polymorphe Methoden (siehe Polymorphie-Kapitel).
C Sprache
- C# Klassen & Objekte: Fundamente für robustes OOP
- C# Static Keyword: Statische Variablen, Methoden und Klassen meistern
- C# Geschachtelte Klassen verstehen: Definition, Verwendung und Vererbung
- C++ Klassentemplates meistern: Ein praktischer Leitfaden
- Python Vererbung meistern: Konzepte, Syntax und praktische Beispiele
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java ObjectOutputStream meistern: Serialisierung, Methoden und praktische Beispiele
- Java Generics meistern – Wiederverwendbaren, typsicheren Code erstellen
- Java-Dateioperationen mit java.io meistern – Erstellen, Lesen, Schreiben & Löschen
- C# Programmstruktur verstehen: Kernkomponenten & Beispiel