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 miautAlle drei Objekte reagieren auf die speak() Methode, aber jedes tut dies auf seine eigene Weise.
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.
- In der Klasse
EmailNotificationsollte die Methode den String zurückgeben: "Sending '(message)' via Email" - In der Klasse
SMSNotificationsollte 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 meowsProbier 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 verwendenDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Objekte & das this-Schlüsselwort
Kurze Wiederholung: ObjekteMethoden zu Objekten hinzufügenDas this-Schlüsselwort verstehenKonstruktorfunktionenDas new-SchlüsselwortWiederholungs-Challenge7Vererbung & das extends-Schlüsselwort
VererbungDie „ist-ein“-BeziehungDas extends-SchlüsselwortDie super()-MethodeVererben von Eigenschaften & MethodenWiederholungs-Challenge10Polymorphie
Was ist Polymorphie?Geerbte Methoden überschreibenVerwendung von superWiederholungs-Challenge13Komposition vs. Vererbung
Die "hat-ein"- vs. "ist-ein"-BeziehungDie Grenzen tiefer VererbungObjekte zusammenbauen2Code organisieren
Was sind Module?Exportieren mit exportImportieren mit importDefault- vs. benannte Exports5Kapselung & Zugriff
KapselungÖffentliche & private KlassenfelderPrivate MethodenWiederholungs-Herausforderung8OOP-Code strukturieren
Klassen in Modulen organisieren11Projekt: Ein Shape-Renderer
Setup: Shape-Klasse & ExportCircle-Klasse: Vererbung14Bibliotheksverwaltungssystem
Entwurf der BibliothekBuch-Klasse mit Komposition3Klassen & Objekte
Was ist eine Klasse?Instanzen erstellenEigenschaften und MethodenWiederholungs-Challenge6Projekt: Ein einfaches Bankkonto
Klasse BankAccountEinzahlungen und Auszahlungen9Statische Methoden & Eigenschaften
Klassenebene vs. InstanzebeneStatische EigenschaftenStatische HilfsmethodenWiederholungs-Challenge12Getter & Setter
Die Schlüsselwörter get und setBerechnete EigenschaftenValidierung und SeiteneffekteWiederholungs-Challenge15Abschluss-Herausforderungen
Spielfiguren-BuilderE-Commerce ProduktsystemUniversitäts-VerwaltungssystemSmart-Home-Gerätesystem