OOP PHP5 - Unterschiede - Abstrakte Klassen
1. Definition
Eine abstrakte Klasse ist ein Interface mit zusätzlichen Methoden und kann nur von anderen Klassen eingebunden werden. Von ihr selber darf man keine Objekte erzeugen. Verstanden? Nein? OK, ein Beispiel.
Unter dem Punkt Schnittstellen hatten wir zum Schluss in zwei Interfaces die Methoden definiert,
über die eine Klasse Mann
verfügen muss, um sich mit Frauen verabreden zu können. Jetzt gehen wir einfach mal davon
aus, dass der Programmierer dieser Klasse ein Frauenversteher ist und sich mit den Prinzipien der Hygiene auskennt.
Wann ist eine Klasse abstrakt?
Sobald man eine Methode als solches definiert. Die ist dann, einfach ausgedrückt, ein Interface in dieser Klasse. Dies geschieht mit
dem Schlüsselwort abstract
, das man sowohl für die Methode als auch für die Klasse benutzen muss.
2. Ein Beispiel
Also, unser Programmierer entwickelt nun für die Klasse Mann
eine Erweiterung in Form einer abstrakten Klasse namens
Frauenversteher
. Da aber eigentlich jeder Mann die Frauen nie wirklich verstehen wird, ist er ein wenig vorsichtig.
Er legt also zwei abstrakte Methoden fest, von denen er weiß, dass sie wohl zum Ziel führen, aber nicht wie.
abstract class Frauenversteher
{
abstract protected function zeigBenehmen($tuer_aufhalt);
abstract protected function blumenMitbring($blumen);
}
Das bedeutet für die Klasse Mann
, dass sie entsprechend erweitert werden sollte und dann über dieselben Methoden
verfügen muss.
class Mann extends Frauenversteher
{
protected function zeigBenehmen($tuer_aufhalt)
{
...
}
protected function blumenMitbring($blumen)
{
...
}
}
3. Weitere Methoden und Eigenschaften
Im Gegensatz zu den Interfaces kann man bei einer abstrakten Klasse zusätzliche Methoden und Eigenschaften verwenden. Einfach ausgedrückt bedeutet das folgendes. Unser Programmierer ist sich bei den oben beschriebenen Methoden nicht so ganz sicher. Er weiß aber ganz genau, dass ein Mann vom Typ "Müffi das Geruchsgespenst" bei Frauen sofort abblitzt. Also kann er in diesem Fall zusätzlich etwas einbauen.
abstract class Frauenversteher
{
abstract protected function zeigBenehmen($tuer_aufhalt);
abstract protected function blumenMitbring($blumen);
protected $geruch;
protected function rasieren($rasierer)
{
...
}
protected function duschen($duschgel)
{
...
}
}
4. Sichtbarkeit
Im Gegensatz zu den Interfaces hat man hier die Möglichkeit unterschiedliche Sichtbarkeiten zu definieren. Allerdings gilt das nur für
protected
und public
, private
ist verboten. Dabei kann die Methode in der eigentlichen
Klasse eine größere Sichtbarkeit haben, als in der abstrakten Klasse vorgegeben worden ist.
abstract class Frauenversteher
{
abstract protected function zeigBenehmen($tuer_aufhalt);
}
class Mann extends Frauenversteher
{
public function zeigBenehmen($tuer_aufhalt)
{
...
}
}
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt