TypeScript - Vererbung
Hallo, zukünftige Programmierer! Heute begeben wir uns auf eine aufregende Reise in die Welt der TypeScript-Vererbung. Als dein freundlicher Nachbar-Computerlehrer bin ich hier, um dich durch dieses faszinierende Thema zu führen. Also, packt eure virtuellen Rucksäcke und taucht ein!
Was ist Vererbung?
Bevor wir beginnen, lassen wir uns klarstellen, was Vererbung eigentlich bedeutet. Stell dir vor, du erstellst einen Stammbaum. Jede neue Generation erbt bestimmte Merkmale von ihren Eltern. In der Programmierung funktioniert Vererbung ähnlich. Sie ermöglicht es, dass eine neue Klasse auf eine bestehende Klasse basiert und deren Eigenschaften und Methoden erbt. Cool, oder?
Einfache Vererbung
Lassen wir mit der einfachsten Form der Vererbung beginnen: einfache Vererbung. Dies ist der Fall, wenn eine Klasse (Kindklasse) von einer anderen Klasse (Elterklasse) erbt.
Grundlegendes Beispiel
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
makeSound(): void {
console.log("Ein allgemeines Tiergeräusch");
}
}
class Dog extends Animal {
breed: string;
constructor(name: string, breed: string) {
super(name);
this.breed = breed;
}
makeSound(): void {
console.log("Wuff! Wuff!");
}
}
let myDog = new Dog("Buddy", "Goldene Retriever");
console.log(myDog.name); // Ausgabe: Buddy
console.log(myDog.breed); // Ausgabe: Goldene Retriever
myDog.makeSound(); // Ausgabe: Wuff! Wuff!
In diesem Beispiel erbt Dog
von Animal
. Der Operator extends
wird verwendet, um eine Klasse zu erstellen, die ein Kind einer anderen Klasse ist.
Erklärung
- Wir definieren eine Basisklasse
Animal
mit einername
Eigenschaft und einermakeSound
Methode. - Dann erstellen wir eine
Dog
Klasse, dieAnimal
erweitert. - Die
Dog
Klasse hat ihre eigenebreed
Eigenschaft. - Wir verwenden den Operator
super
imDog
Konstruktor, um denAnimal
Konstruktor aufzurufen. - Wir überschreiben die
makeSound
Methode in derDog
Klasse.
Super-Schlüsselwort
Vielleicht hast du das super
Schlüsselwort in unserem vorherigen Beispiel bemerkt. Lassen wir uns tiefer in das ein, was es macht.
Beispiel mit Super
class Vehicle {
make: string;
model: string;
constructor(make: string, model: string) {
this.make = make;
this.model = model;
}
getInfo(): string {
return `${this.make} ${this.model}`;
}
}
class Car extends Vehicle {
numDoors: number;
constructor(make: string, model: string, numDoors: number) {
super(make, model);
this.numDoors = numDoors;
}
getInfo(): string {
return `${super.getInfo()} mit ${this.numDoors} Türen`;
}
}
let myCar = new Car("Toyota", "Corolla", 4);
console.log(myCar.getInfo()); // Ausgabe: Toyota Corolla mit 4 Türen
Erklärung
- Das
super
Schlüsselwort wird imCar
Konstruktor verwendet, um denVehicle
Konstruktor aufzurufen. - In der
getInfo
Methode vonCar
verwenden wirsuper.getInfo()
, um diegetInfo
Methode der Elterklasse aufzurufen.
Das super
Schlüsselwort ermöglicht es uns, Funktionen auf einem Objekts Elter zu访问 und aufrufen.
Methodenüberschreibung
Methodenüberschreibung tritt auf, wenn eine Kindklasse eine spezifische Implementierung einer Methode bereitstellt, die bereits in ihrer Elterklasse definiert ist. Wir haben das tatsächlich in beiden vorherigen Beispielen gesehen!
Ein weiteres Beispiel für Methodenüberschreibung
class Shape {
getArea(): number {
return 0;
}
}
class Circle extends Shape {
radius: number;
constructor(radius: number) {
super();
this.radius = radius;
}
getArea(): number {
return Math.PI * this.radius * this.radius;
}
}
class Rectangle extends Shape {
width: number;
height: number;
constructor(width: number, height: number) {
super();
this.width = width;
this.height = height;
}
getArea(): number {
return this.width * this.height;
}
}
let myCircle = new Circle(5);
console.log(myCircle.getArea()); // Ausgabe: 78.53981633974483
let myRectangle = new Rectangle(4, 5);
console.log(myRectangle.getArea()); // Ausgabe: 20
Erklärung
- Wir haben eine Basisklasse
Shape
mit einergetArea
Methode, die 0 zurückgibt. - Sowohl
Circle
als auchRectangle
Klassen erweiternShape
und überschreiben diegetArea
Methode mit eigenen Implementierungen. - Die
Circle
Klasse berechnet die Fläche mit der Formel πr². - Die
Rectangle
Klasse berechnet die Fläche durch Multiplikation von Breite und Höhe.
Mehrebenenvererbung
Mehrebenenvererbung bezieht sich auf eine Kindklasse, die von einer anderen Kindklasse erbt. Es ist wie ein Stammbaum mit mehreren Generationen.
Beispiel für Mehrebenenvererbung
class Grandparent {
surname: string;
constructor(surname: string) {
this.surname = surname;
}
getSurname(): string {
return this.surname;
}
}
class Parent extends Grandparent {
firstName: string;
constructor(firstName: string, surname: string) {
super(surname);
this.firstName = firstName;
}
getFullName(): string {
return `${this.firstName} ${this.getSurname()}`;
}
}
class Child extends Parent {
middleName: string;
constructor(firstName: string, middleName: string, surname: string) {
super(firstName, surname);
this.middleName = middleName;
}
getFullName(): string {
return `${this.firstName} ${this.middleName} ${this.getSurname()}`;
}
}
let myChild = new Child("John", "Doe", "Smith");
console.log(myChild.getFullName()); // Ausgabe: John Doe Smith
Erklärung
- Wir haben eine
Grandparent
Klasse mit einersurname
Eigenschaft. - Die
Parent
Klasse erweitertGrandparent
und fügt einefirstName
Eigenschaft hinzu. - Die
Child
Klasse erweitertParent
und fügt einemiddleName
Eigenschaft hinzu. - Jede Klasse hat ihre eigene Implementierung der
getFullName
Methode.
Zusammenfassung der Vererbungsmethoden
Hier ist eine Tabelle, die die wichtigsten Methoden und Schlüsselwörter zusammenfasst, die wir besprochen haben:
Methode/Schlüsselwort | Beschreibung |
---|---|
extends |
Wird verwendet, um eine Klasse als Kind einer anderen Klasse zu erstellen |
super() |
Ruft den Konstruktor der Elterklasse auf |
super.method() |
Ruft eine Methode aus der Elterklasse auf |
Methodenüberschreibung | Bereitstellung einer neuen Implementierung für eine Methode in einer Kindklasse |
Und das war's! Wir haben die Grundlagen der Vererbung in TypeScript behandelt. Denke daran, Übung macht den Meister, also zögere nicht, diese Konzepte auszuprobieren. Viel Spaß beim Programmieren, zukünftige TypeScript-Zauberer!
Credits: Image by storyset