Informationen zu Vererbung und abstrakten Klassen
Vererbung und abstrakte Klassen sind zwei wichtige Programmierkonstrukte, die in objektorientierten Programmiersprachen vorkommen. Diese Konzepte werden verwendet, um über‑ und untergeordnete Beziehungen zwischen Klassen zu erstellen. Durch Vererbung kann eine untergeordnete Klasse eine übergeordnete Klasse erweitern. Die untergeordnete Klasse erbt alle Attribute und Methoden der übergeordneten Klasse. Untergeordnete Klassen können auch das Verhalten von Methoden überschreiben, die von der übergeordneten Klasse geerbt wurden, oder deren Funktionsumfang erweitern.
Vererbung
Um das Konzept der Vererbung in der objektorientierten Programmierung besser zu verstehen, sehen wir uns ein reales Beispiel an. In diesem Beispiel ist Fahrzeug die übergeordnete Klasse. Es gibt viele verschiedene Arten von Fahrzeugen, wie beispielsweise Autos, Busse und Lkw. In diesem Szenario ist Fahrzeug die übergeordnete Klasse. Autos, Busse und Lkw sind abgeleitete Klassen, die von Fahrzeug erben. Die Klasse Fahrzeug verfügt über Merkmale, die für alle Fahrzeugtypen gelten (z. B. Geschwindigkeit, Farbe und Getriebe). Die Merkmale der einzelnen Fahrzeugtypen können unterschiedlich sein. Zum Beispiel kann ein Lkw einen Allradantrieb haben, ein Auto jedoch nicht.

Beispiel
Das folgende Beispiel zeigt, wie eine Klasse Vererbung verwendet. Die Klasse „Auto“ erweitert die Klasse „Fahrzeug“, um die Höhe und Breite zu erhalten, fügt aber auch die Variable „Anzahl der Passagiere“ hinzu.
class Vehicle
{
// Instance fields.
real height;
real width;
// Constructor to initialize fields height and width.
new(real _height, real _width)
{
height = _height;
width = _width;
}
}
class Car extends Vehicle
{
// Additional instance field numberOfPassengers. Fields height and width are inherited.
int numberOfPassengers;
// Constructor is overridden to initialize numberOfPassengers.
new(real _height, real _width, int _numberOfPassengers)
{
// Initialize the fields.
super(_height, _width);
numberOfPassengers = _numberOfPassengers;
}
}
Abstrakt
Abstrakte Klassen sind durch das Schlüsselwort abstract gekennzeichnet. Sie können nicht instanziiert werden, sondern erfordern eine untergeordnete Klasse, die von der abstrakten Klasse geerbt wird. Abstrakte Klassen werden verwendet, um ein Konzept zu implementieren, das die untergeordnete Klasse dann vervollständigt. Abstrakte Methoden können ebenfalls in abstrakten Klassen deklariert werden. Abstrakte Methoden lassen keinen Code oder Deklarationen in der Methode zu. Eine untergeordnete Klasse muss die abstrakte Klasse erweitern, um die abstrakte Methode zu verwenden.
Beispiel
Nachfolgend finden Sie ein Beispiel für eine abstrakte Klasse. Die Klasse „Auto“ erweitert die abstrakte Klasse „Fahrzeug“. Dadurch kann die Klasse „Auto“ die Methode printInfo() überschreiben und ermöglicht es Ihnen, Funktionen zur Methode operate() hinzuzufügen, die nicht in der abstrakten Klasse enthalten waren.
abstract class Vehicle
{
str owner;
int age;
void printInfo()
{
Info(strfmt("%1, %2",owner, age));
}
abstract void operate()
{
}
}
class Car extends Vehicle
{
str model;
void printInfo()
{
// overriding default functionality
Info(strfmt("%1, %2, %3",owner, age, model));
}
void operate()
{
Info('running');
}
}