C# Polymorphismus
Polymorphismus und überschreibende Methoden
Polymorphismus bedeutet „viele Formen“ und tritt auf, wenn wir viele Klassen haben, die durch Vererbung miteinander verbunden sind.
Wie wir im vorherigen Kapitel angegeben haben; Mit Inheritance können wir Felder und Methoden von einer anderen Klasse erben. Polymorphismus verwendet diese Methoden, um verschiedene Aufgaben auszuführen. Dadurch können wir eine einzelne Aktion auf unterschiedliche Weise ausführen.
Stellen Sie sich beispielsweise eine Basisklasse namens Animal
vor, die über eine Methode namens animalSound()
verfügt. Abgeleitete Tierklassen könnten Schweine, Katzen, Hunde, Vögel sein – und sie haben auch ihre eigene Implementierung eines Tiergeräuschs (das Schwein ächzt, und die Katze miaut usw.):
Beispiel
class Animal // Basisklasse (übergeordnet)
{
public void animalSound()
{
Console.WriteLine("Das Tier macht ein Geräusch");
}
}
class Pig : Animal // Abgeleitete Klasse (Kind)
{
public void animalSound()
{
Console.WriteLine("Das Schwein sagt: Pipi");
}
}
class Dog : Animal // Abgeleitete Klasse (Kind)
{
public void animalSound()
{
Console.WriteLine("Der Hund sagt: Bow wow");
}
}
Denken Sie daran, dass wir im Kapitel C#-Vererbung das Symbol :
verwenden, um von einer Klasse zu erben.
Jetzt können wir Pig
- und Dog
-Objekte erstellen und den aufrufen animalSound()
-Methode für beide:
Beispiel
class Animal // Basisklasse (übergeordnet)
{
public void animalSound()
{
Console.WriteLine("Das Tier macht ein Geräusch");
}
}
class Pig : Animal // Abgeleitete Klasse (Kind)
{
public void animalSound()
{
Console.WriteLine("Das Schwein sagt: Pipi");
}
}
class Dog : Animal // Abgeleitete Klasse (Kind)
{
public void animalSound()
{
Console.WriteLine("Der Hund sagt: Bow wow");
}
}
class Program
{
static void Main(string[] args)
{
Animal myAnimal = new Animal(); // Erstellen Sie ein Animal-Objekt
Animal myPig = new Pig(); // Erstellen Sie ein Pig-Objekt
Animal myDog = new Dog(); // Erstellen Sie ein Dog-Objekt
myAnimal.animalSound();
myPig.animalSound();
myDog.animalSound();
}
}
Die Ausgabe wird sein:
Das Tier macht ein Geräusch
Das Tier macht ein Geräusch
Das Tier macht ein Geräusch
Nicht die Ausgabe, nach der ich gesucht habe
Die Ausgabe des obigen Beispiels entsprach wahrscheinlich nicht Ihren Erwartungen. Das liegt daran, dass die Methode der Basisklasse die Methode der abgeleiteten Klasse überschreibt, wenn sie denselben Namen haben.
C# bietet jedoch eine Option zum Überschreiben der Basisklassenmethode, indem das Schlüsselwort virtual
zur Methode innerhalb der Basisklasse hinzugefügt und das Schlüsselwort override
Schlüsselwort für jede abgeleitete Klassenmethode:
Beispiel
class Animal // Basisklasse (übergeordnet)
{
public virtual void animalSound()
{
Console.WriteLine("Das Tier macht ein Geräusch");
}
}
class Pig : Animal // Abgeleitete Klasse (Kind)
{
public override void animalSound()
{
Console.WriteLine("Das Schwein sagt: Pipi");
}
}
class Dog : Animal // Abgeleitete Klasse (Kind)
{
public override void animalSound()
{
Console.WriteLine("Der Hund sagt: Bow wow");
}
}
class Program
{
static void Main(string[] args)
{
Animal myAnimal = new Animal(); // Erstellen Sie ein Animal-Objekt
Animal myPig = new Pig(); // Erstellen Sie ein Pig-Objekt
Animal myDog = new Dog(); // Erstellen Sie ein Dog-Objekt
myAnimal.animalSound();
myPig.animalSound();
myDog.animalSound();
}
}
Die Ausgabe wird sein:
Das Tier macht ein Geräusch
Das Schwein sagt: Pipi
Der Hund sagt: Bow wow
Warum und wann werden „Vererbung“ und „Polymorphismus“ verwendet?
Es ist nützlich für die Wiederverwendbarkeit von Code: Verwenden Sie Felder und Methoden einer vorhandenen Klasse wieder, wenn Sie eine neue Klasse erstellen.