Verständnis der Vererbung mit Extends und Super()
Was ist Klassenvererbung?
JavaScript verwendet das Schlüsselwort extends
, um diese Beziehung zwischen Klassen herzustellen. Eine Kindklasse kann eigene Eigenschaften und Methoden hinzufügen oder die der Elternklasse überschreiben.
Eine Kindklasse ist eine spezialisierte Version der Elternklasse. Wenn die Elternklasse eine Blaupause für ein Auto ist, könnte die Kindklasse einen bestimmten Autotyp darstellen, wie zum Beispiel ein Elektroauto. Das Elektroauto erbt die grundlegenden Funktionen (Räder, Lenkung), kann jedoch Funktionen hinzufügen oder anpassen (Batterie, Ladesystem).
Verwendung des Schlüsselworts extends
Das Schlüsselwort extends
wird verwendet, um eine Klasse von einer anderen Klasse erben zu lassen. Die Kindklasse erbt alle Eigenschaften und Methoden der Elternklasse.
1234567891011121314151617181920class Animal { constructor(name) { this.name = name; } makeSound() { console.log(`${this.name} makes a sound.`); } } // Child class extending the Animal class class Dog extends Animal { bark() { console.log(`${this.name} barks!`); } } const dog = new Dog('Rex'); dog.makeSound(); // Output: Rex makes a sound. dog.bark(); // Output: Rex barks!
In diesem Beispiel erweitert die Klasse Dog
die Klasse Animal
und erbt die Methode makeSound()
von der Elternklasse. Die Klasse Dog
fügt außerdem ihre eigene Methode bark()
hinzu.
Arbeiten mit dem Konstruktor in einer Kindklasse
Beim Erstellen einer Kindklasse müssen häufig sowohl eigene Eigenschaften als auch die der Elternklasse initialisiert werden. Dies geschieht über die constructor-Methode. Um sicherzustellen, dass die Elternklasse korrekt initialisiert wird, muss jedoch die Funktion super()
verwendet werden, um den Konstruktor der Elternklasse aufzurufen.
Wichtig: Wenn eine Kindklasse einen Konstruktor besitzt, muss super()
vor dem Zugriff auf this
aufgerufen werden, da sonst ein Fehler auftritt.
Verwendung von super() zum Aufruf des Elternklassen-Konstruktors
Die Funktion super()
wird verwendet, um den Konstruktor der Elternklasse aus dem Konstruktor der Kindklasse aufzurufen. Dadurch wird sichergestellt, dass alle Eigenschaften oder Logik, die im Konstruktor der Elternklasse definiert sind, korrekt initialisiert werden, bevor neue Funktionalität in der Kindklasse hinzugefügt wird.
1234567891011121314151617181920212223242526class Animal { constructor(name) { this.name = name; } makeSound() { console.log(`${this.name} makes a sound.`); } } // Child class with its own constructor class Dog extends Animal { constructor(name, breed) { // Call the parent class constructor using super() super(name); this.breed = breed; } bark() { console.log(`${this.name}, the ${this.breed}, barks!`); } } const dog = new Dog('Rex', 'German Shepherd'); dog.makeSound(); // Output: Rex makes a sound. dog.bark(); // Output: Rex, the German Shepherd, barks!
In diesem Beispiel gibt es eine Basisklasse namens Animal
mit einem Konstruktor, der die Eigenschaft name
initialisiert, sowie eine Methode makeSound
, die eine generische Klangmeldung ausgibt. Die Klasse Dog
erweitert Animal
und fügt einen eigenen Konstruktor hinzu, der sowohl name
als auch breed
als Argumente akzeptiert. Im Konstruktor von Dog
wird die Funktion super()
verwendet, um den Konstruktor der Elternklasse aufzurufen und sicherzustellen, dass name
korrekt gesetzt wird. Zusätzlich führt Dog
eine neue Methode bark
ein, die eine Meldung ausgibt, die speziell auf die Rasse des Hundes zugeschnitten ist. Wenn eine neue Instanz von Dog
mit dem Namen Rex
und der Rasse German Shepherd
erstellt wird, können sowohl makeSound
als auch bark
aufgerufen werden, was das geerbte und das neue Verhalten demonstriert.
Wichtige Punkte bei der Verwendung von extends und super()
Vererbung: Das Schlüsselwort extends
ermöglicht es der Kindklasse, Eigenschaften und Methoden von der Elternklasse zu erben.
Konstruktor in der Kindklasse: Beim Definieren eines Konstruktors in der Kindklasse sollte immer super()
verwendet werden, um den Konstruktor der Elternklasse aufzurufen.
Zugriff auf this
: super()
muss aufgerufen werden, bevor in einem Konstruktor der Kindklasse auf this
zugegriffen wird.
Methodenüberschreibung: Methoden der Elternklasse können in der Kindklasse überschrieben werden, indem eine Methode mit demselben Namen definiert wird. Mit super.methodName()
kann die Methode der Elternklasse innerhalb der Kindklasse aufgerufen werden, falls erforderlich.
Beispiel: Methoden überschreiben und super() verwenden
Manchmal ist es erforderlich, eine Methode der Elternklasse in der Kindklasse zu überschreiben, dabei jedoch weiterhin die Methode der Elternklasse als Teil der neuen Logik aufzurufen. Dies kann mit super.methodName()
erreicht werden.
1234567891011121314151617181920212223242526272829class Animal { constructor(name) { this.name = name; } makeSound() { console.log(`${this.name} makes a generic sound.`); } } class Dog extends Animal { constructor(name, breed) { super(name); this.breed = breed; } // Override the makeSound method makeSound() { // Call the parent class's makeSound method super.makeSound(); console.log(`${this.name}, the ${this.breed}, barks loudly.`); } } const dog = new Dog('Rex', 'German Shepherd'); dog.makeSound(); // Output: // Rex makes a generic sound. // Rex, the German Shepherd, barks loudly.
In diesem Beispiel überschreibt die Klasse Dog
die Methode makeSound
, ruft jedoch weiterhin die Methode makeSound
der Elternklasse mit super.makeSound()
auf. Dadurch kann die Kindklasse das Verhalten der Elternklasse erweitern, ohne es vollständig zu ersetzen.
Praxisbeispiel: Employee- und Manager-Klassen
Betrachten wir ein Szenario, in dem wir eine Employee
-Klasse und eine Manager
-Klasse haben, die von dieser erbt. Die Manager
-Klasse erweitert die Funktionalität der Basisklasse Employee
um zusätzliche Eigenschaften.
12345678910111213141516171819202122232425262728class Employee { constructor(name, position) { this.name = name; this.position = position; } getDetails() { return `${this.name} works as a ${this.position}.`; } } class Manager extends Employee { constructor(name, position, department) { // Call the parent class constructor using super() super(name, position); this.department = department; } getDetails() { return `${super.getDetails()} They manage the ${ this.department } department.`; } } const manager = new Manager('Alice', 'Manager', 'Sales'); console.log(manager.getDetails()); // Output: Alice works as a Manager. They manage the Sales department.
In diesem Beispiel erweitert die Manager
-Klasse die Employee
-Klasse um eine neue Eigenschaft department
. Die Methode getDetails()
in der Manager
-Klasse ruft die Methode der Elternklasse mit super.getDetails()
auf und ergänzt anschließend die abteilungsspezifischen Informationen.
1. Was bewirkt das Schlüsselwort extends
?
2. Warum wird in einer Kindklasse super()
im Konstruktor verwendet?
3. Was gibt der folgende Code aus?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Awesome!
Completion rate improved to 2.22
Verständnis der Vererbung mit Extends und Super()
Swipe um das Menü anzuzeigen
Was ist Klassenvererbung?
JavaScript verwendet das Schlüsselwort extends
, um diese Beziehung zwischen Klassen herzustellen. Eine Kindklasse kann eigene Eigenschaften und Methoden hinzufügen oder die der Elternklasse überschreiben.
Eine Kindklasse ist eine spezialisierte Version der Elternklasse. Wenn die Elternklasse eine Blaupause für ein Auto ist, könnte die Kindklasse einen bestimmten Autotyp darstellen, wie zum Beispiel ein Elektroauto. Das Elektroauto erbt die grundlegenden Funktionen (Räder, Lenkung), kann jedoch Funktionen hinzufügen oder anpassen (Batterie, Ladesystem).
Verwendung des Schlüsselworts extends
Das Schlüsselwort extends
wird verwendet, um eine Klasse von einer anderen Klasse erben zu lassen. Die Kindklasse erbt alle Eigenschaften und Methoden der Elternklasse.
1234567891011121314151617181920class Animal { constructor(name) { this.name = name; } makeSound() { console.log(`${this.name} makes a sound.`); } } // Child class extending the Animal class class Dog extends Animal { bark() { console.log(`${this.name} barks!`); } } const dog = new Dog('Rex'); dog.makeSound(); // Output: Rex makes a sound. dog.bark(); // Output: Rex barks!
In diesem Beispiel erweitert die Klasse Dog
die Klasse Animal
und erbt die Methode makeSound()
von der Elternklasse. Die Klasse Dog
fügt außerdem ihre eigene Methode bark()
hinzu.
Arbeiten mit dem Konstruktor in einer Kindklasse
Beim Erstellen einer Kindklasse müssen häufig sowohl eigene Eigenschaften als auch die der Elternklasse initialisiert werden. Dies geschieht über die constructor-Methode. Um sicherzustellen, dass die Elternklasse korrekt initialisiert wird, muss jedoch die Funktion super()
verwendet werden, um den Konstruktor der Elternklasse aufzurufen.
Wichtig: Wenn eine Kindklasse einen Konstruktor besitzt, muss super()
vor dem Zugriff auf this
aufgerufen werden, da sonst ein Fehler auftritt.
Verwendung von super() zum Aufruf des Elternklassen-Konstruktors
Die Funktion super()
wird verwendet, um den Konstruktor der Elternklasse aus dem Konstruktor der Kindklasse aufzurufen. Dadurch wird sichergestellt, dass alle Eigenschaften oder Logik, die im Konstruktor der Elternklasse definiert sind, korrekt initialisiert werden, bevor neue Funktionalität in der Kindklasse hinzugefügt wird.
1234567891011121314151617181920212223242526class Animal { constructor(name) { this.name = name; } makeSound() { console.log(`${this.name} makes a sound.`); } } // Child class with its own constructor class Dog extends Animal { constructor(name, breed) { // Call the parent class constructor using super() super(name); this.breed = breed; } bark() { console.log(`${this.name}, the ${this.breed}, barks!`); } } const dog = new Dog('Rex', 'German Shepherd'); dog.makeSound(); // Output: Rex makes a sound. dog.bark(); // Output: Rex, the German Shepherd, barks!
In diesem Beispiel gibt es eine Basisklasse namens Animal
mit einem Konstruktor, der die Eigenschaft name
initialisiert, sowie eine Methode makeSound
, die eine generische Klangmeldung ausgibt. Die Klasse Dog
erweitert Animal
und fügt einen eigenen Konstruktor hinzu, der sowohl name
als auch breed
als Argumente akzeptiert. Im Konstruktor von Dog
wird die Funktion super()
verwendet, um den Konstruktor der Elternklasse aufzurufen und sicherzustellen, dass name
korrekt gesetzt wird. Zusätzlich führt Dog
eine neue Methode bark
ein, die eine Meldung ausgibt, die speziell auf die Rasse des Hundes zugeschnitten ist. Wenn eine neue Instanz von Dog
mit dem Namen Rex
und der Rasse German Shepherd
erstellt wird, können sowohl makeSound
als auch bark
aufgerufen werden, was das geerbte und das neue Verhalten demonstriert.
Wichtige Punkte bei der Verwendung von extends und super()
Vererbung: Das Schlüsselwort extends
ermöglicht es der Kindklasse, Eigenschaften und Methoden von der Elternklasse zu erben.
Konstruktor in der Kindklasse: Beim Definieren eines Konstruktors in der Kindklasse sollte immer super()
verwendet werden, um den Konstruktor der Elternklasse aufzurufen.
Zugriff auf this
: super()
muss aufgerufen werden, bevor in einem Konstruktor der Kindklasse auf this
zugegriffen wird.
Methodenüberschreibung: Methoden der Elternklasse können in der Kindklasse überschrieben werden, indem eine Methode mit demselben Namen definiert wird. Mit super.methodName()
kann die Methode der Elternklasse innerhalb der Kindklasse aufgerufen werden, falls erforderlich.
Beispiel: Methoden überschreiben und super() verwenden
Manchmal ist es erforderlich, eine Methode der Elternklasse in der Kindklasse zu überschreiben, dabei jedoch weiterhin die Methode der Elternklasse als Teil der neuen Logik aufzurufen. Dies kann mit super.methodName()
erreicht werden.
1234567891011121314151617181920212223242526272829class Animal { constructor(name) { this.name = name; } makeSound() { console.log(`${this.name} makes a generic sound.`); } } class Dog extends Animal { constructor(name, breed) { super(name); this.breed = breed; } // Override the makeSound method makeSound() { // Call the parent class's makeSound method super.makeSound(); console.log(`${this.name}, the ${this.breed}, barks loudly.`); } } const dog = new Dog('Rex', 'German Shepherd'); dog.makeSound(); // Output: // Rex makes a generic sound. // Rex, the German Shepherd, barks loudly.
In diesem Beispiel überschreibt die Klasse Dog
die Methode makeSound
, ruft jedoch weiterhin die Methode makeSound
der Elternklasse mit super.makeSound()
auf. Dadurch kann die Kindklasse das Verhalten der Elternklasse erweitern, ohne es vollständig zu ersetzen.
Praxisbeispiel: Employee- und Manager-Klassen
Betrachten wir ein Szenario, in dem wir eine Employee
-Klasse und eine Manager
-Klasse haben, die von dieser erbt. Die Manager
-Klasse erweitert die Funktionalität der Basisklasse Employee
um zusätzliche Eigenschaften.
12345678910111213141516171819202122232425262728class Employee { constructor(name, position) { this.name = name; this.position = position; } getDetails() { return `${this.name} works as a ${this.position}.`; } } class Manager extends Employee { constructor(name, position, department) { // Call the parent class constructor using super() super(name, position); this.department = department; } getDetails() { return `${super.getDetails()} They manage the ${ this.department } department.`; } } const manager = new Manager('Alice', 'Manager', 'Sales'); console.log(manager.getDetails()); // Output: Alice works as a Manager. They manage the Sales department.
In diesem Beispiel erweitert die Manager
-Klasse die Employee
-Klasse um eine neue Eigenschaft department
. Die Methode getDetails()
in der Manager
-Klasse ruft die Methode der Elternklasse mit super.getDetails()
auf und ergänzt anschließend die abteilungsspezifischen Informationen.
1. Was bewirkt das Schlüsselwort extends
?
2. Warum wird in einer Kindklasse super()
im Konstruktor verwendet?
3. Was gibt der folgende Code aus?
Danke für Ihr Feedback!