BESTE WEBSITE FÜR WEBENTWICKLER
C# Sprache. W3Schools auf Deutsch. Unterricht für Anfänger

Ua En Es

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

Try it Yourself »


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

Try it Yourself »

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.