Hauptmenü

Untermenü

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