Menu
Coddy logo textTech

Was ist Polymorphie?

Teil des Abschnitts Objektorientierte Programmierung der JavaScript-Journey von Coddy — Lektion 35 von 56.

Polymorphismus ist ein Kernprinzip der objektorientierten Programmierung, das es Objekten verschiedener Klassen ermöglicht, auf dieselbe Methode auf unterschiedliche Weise zu reagieren.

In JavaScript tritt Polymorphismus am häufigsten auf, wenn Kindklassen Methoden von Elternklassen überschreiben.

Erstellen wir eine einfache Elternklasse mit einer speak()-Methode:

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    return `${this.name} makes a sound`;
  }
}

Erstellen wir nun eine Kindklasse, die Animal erweitert:

class Dog extends Animal {
  speak() {
    return `${this.name} barks`;
  }
}

Hier ist eine weitere Unterklasse:

class Cat extends Animal {
  speak() {
    return `${this.name} meows`;
  }
}

Jede Kindklasse implementiert die speak() Methode unterschiedlich. Das ist Polymorphismus in Aktion!

Wir können nun verschiedene Objekte erstellen und dieselbe Methode für jedes aufrufen:

const animal = new Animal("Some animal");
const dog = new Dog("Rex");
const cat = new Cat("Whiskers");

console.log(animal.speak()); // Ein Tier macht ein Geräusch
console.log(dog.speak());    // Rex bellt
console.log(cat.speak());    // Whiskers miaut

Alle drei Objekte reagieren auf die speak() Methode, aber jedes tut dies auf seine eigene Weise.

challenge icon

Aufgabe

Sie haben ein Benachrichtigungssystem mit einer Basisklasse Notification und zwei Kindklassen. Ihre Aufgabe ist es, die Methode send(message) zu jeder Kindklasse mit unterschiedlichen Implementierungen hinzuzufügen.

  1. In der Klasse EmailNotification sollte die Methode den String zurückgeben: "Sending '(message)' via Email"
  2. In der Klasse SMSNotification sollte die Methode den String zurückgeben: "Sending '(message)' via SMS"

Spickzettel

Polymorphismus ermöglicht es Objekten verschiedener Klassen, auf dieselbe Methode auf unterschiedliche Weise zu reagieren. In JavaScript wird dies üblicherweise erreicht, wenn Kindklassen Methoden von Elternklassen überschreiben.

Erstellen Sie eine Elternklasse mit einer Methode:

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    return `${this.name} makes a sound`;
  }
}

Kindklassen können die Elternmethode mit ihrer eigenen Implementierung überschreiben:

class Dog extends Animal {
  speak() {
    return `${this.name} barks`;
  }
}

class Cat extends Animal {
  speak() {
    return `${this.name} meows`;
  }
}

Jedes Objekt reagiert unterschiedlich auf dieselbe Methode:

const animal = new Animal("Some animal");
const dog = new Dog("Rex");
const cat = new Cat("Whiskers");

console.log(animal.speak()); // Some animal makes a sound
console.log(dog.speak());    // Rex barks
console.log(cat.speak());    // Whiskers meows

Probier es selbst

import { EmailNotification } from './email-notification.js';
import { SMSNotification } from './sms-notification.js';

// Testcode - nicht ändern
const email = new EmailNotification();
const sms = new SMSNotification();

console.log(email.send("Hello!"));  // Sollte die send()-Methode von EmailNotification verwenden
console.log(sms.send("Hello!"));    // Sollte die send()-Methode von SMSNotification verwenden
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung