Vererbung

Eines der großen Themen und damit eine Stärke der objektorientierten Programmierung ist die Vererbung. Klassen können sowohl Variablen wie auch Funktionen einer Klasse vererben. Diese Variablen und Funktionen können dann genauso benutzt werden, als ob diese in der Klasse selbst definiert worden sind.

Das folgende Programm demonstriert die Vererbung:

Innerhalb dieses Programmes erbt die Klasse Pickup von der Klasse Auto. Dabei wird die eine Funktion fahren() sowie die protected-Variable $tank der Klasse Auto mit vererbt. Wenn nun – wie im unteren Teil des Programmes dies geschieht – ein Objekt des Typs Pickup erstellt wird, so besitzt dieses Objekt die Funktion fahren(), welche im Beispiel oben auch aufgerufen wird und die entsprechende Ausgabe erzeugt. Die Funktion laden() ist nur für die Klasse Pickup definiert. Innerhalb dieser Funktion lässt sich jedoch trotzdem mit $this->tank die protected-Variable der Oberklasse Auto auslesen. Würde übrigens eine neue Variable $tank in der Unterklasse Pickup definiert werden, so würde diese die Variable der Oberklasse überdecken. Dies bedeutet, dass nun zwei $tank-Variablen in den Pickup-Objekten existieren würden, von denen nur jeweils eine sichtbar wäre. Ebenso wäre – wie weiter oben schon gesagt – auch ein Zugriff auf eine private-Variable hier nicht möglich. Die letzte Zeile des Programmes endet mit einem Fehler. Die Methode laden() ist in der Oberklasse nicht definiert. Folgende Ausgabe wird geliefert: Fatal error: Uncaught Error: Call to undefined method Auto::laden()

Wie Variablen überdeckt werden können, können auch Methoden überdeckt werden. Da ein Pickup größer als ein Auto ist, verbraucht dieser auch mehr Treibstoff. Es wird deshalb in der Klasse Pickup die Funktion fahren() wie folgt überschrieben:

Es ist zu sehen, dass die Funktion überschrieben ist und der Pickup auf der gleichen Strecke einen halben Liter mehr Treibstoff verbraucht.

Wenn Vererbung stattfindet, kann die Sichtbarkeit von Funktionen geändert werden. Es ist möglich, eine Funktion immer sichtbarer zu machen. Das bedeutet, eine überschreibende Funktion kann protected oder public gekennzeichnet sein, statt dass sie private bleibt, wie die überschriebene Funktion. Umgekehrt ist es jedoch nicht möglich, dass mit einer Vererbung der Zugriff auf eine Funktion eingeschränkt wird.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert