Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Verständnis der Vererbung mit Extends und Super() | JavaScript-Klassen und Vererbung Meistern
Fortgeschrittene JavaScript-Beherrschung

bookVerstä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.

1234567891011121314151617181920
class 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!
copy

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.

1234567891011121314151617181920212223242526
class 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!
copy

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.

1234567891011121314151617181920212223242526272829
class 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.
copy

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.

12345678910111213141516171819202122232425262728
class 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.
copy

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?

question mark

Was bewirkt das Schlüsselwort extends?

Select the correct answer

question mark

Warum wird in einer Kindklasse super() im Konstruktor verwendet?

Select the correct answer

question mark

Was gibt der folgende Code aus?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 14

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 2.22

bookVerstä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.

1234567891011121314151617181920
class 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!
copy

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.

1234567891011121314151617181920212223242526
class 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!
copy

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.

1234567891011121314151617181920212223242526272829
class 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.
copy

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.

12345678910111213141516171819202122232425262728
class 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.
copy

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?

question mark

Was bewirkt das Schlüsselwort extends?

Select the correct answer

question mark

Warum wird in einer Kindklasse super() im Konstruktor verwendet?

Select the correct answer

question mark

Was gibt der folgende Code aus?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 14
some-alt