Kannst du die Prinzipien der Vererbung in der objektorientierten Programmierung erklären?
sobes.tech KI
Antwort von AI
Vererbung ermöglicht die Erstellung einer neuen Klasse (Unterklasse oder abgeleitete Klasse), die auf einer bestehenden Klasse (Eltern-, Basis- oder Superklasse) basiert. Die Unterklasse erbt Eigenschaften (Attribute) und Methoden der Elternklasse und kann eigene hinzufügen oder die geerbten überschreiben.
Hauptkonzepte:
- Erweiterung der Funktionalität: Durch Vererbung von der Elternklasse erhält die Unterklasse grundlegende Funktionalität und kann diese erweitern, indem sie neue Methoden oder Eigenschaften hinzufügt.
- Methodenüberschreibung: Die Unterklasse kann das Verhalten einer von der Elternklasse geerbten Methode ändern, indem sie eine Methode mit demselben Namen erstellt (Polymorphismus).
- Code-Wiederverwendung: Vermeidet Code-Duplikation, da die gemeinsame Logik in der Elternklasse definiert wird.
- "Ist-ein"-Beziehung: Vererbung modelliert die Beziehung "ist ein" (is-a). Zum Beispiel: "Eine Katze ist ein Tier".
<?php
class Animal {
protected $name;
public function __construct($name) {
$this->name = $name;
}
public function speak() {
echo "Unbekannter Ton\n";
}
}
class Dog extends Animal {
public function speak() {
echo "Wuff-Wuff!\n";
}
}
class Cat extends Animal {
public function speak() {
echo "Miau-Miau!\n";
}
}
$dog = new Dog("Bobby");
$dog->speak(); // Ausgabe: Wuff-Wuff!
$cat = new Cat("Murka");
$cat->speak(); // Ausgabe: Miau-Miau!
?>
In PHP erfolgt die Vererbung mit dem Schlüsselwort extends. Eine Klasse kann nur von einer Klasse erben (einfache Vererbung), aber mehrere Schnittstellen implementieren.
Der Zugriff auf Eigenschaften und Methoden der Elternklasse aus der Kindklasse ist mit parent:: möglich.
<?php
class ParentClass {
protected $value = "Elternwert";
public function showValue() {
echo $this->value . "\n";
}
}
class ChildClass extends ParentClass {
// Überschreiben der Eigenschaft
protected $value = "Kindwert";
public function showValues() {
// Aufruf der Elternmethode
parent::showValue();
// Ausgabe des Werts der Kindklasse
echo $this->value . "\n";
}
}
$obj = new ChildClass();
$obj->showValues();
// Ausgabe:
// Elternwert
// Kindwert
?>
Wichtige Zugriffsmodifikatoren:
public: Überall zugänglich.protected: Innerhalb der Klasse und in erbenden Klassen zugänglich.private: Nur innerhalb der Klasse zugänglich.
Methoden können als final deklariert werden, was ihre Überschreibung in Unterklassen verbietet. Klassen können ebenfalls final sein, was ihre Vererbung verbietet. Sie können abstract sein, was ihre Implementierung in Unterklassen erfordert.