Abstrakte Klassen

Abstrakte Klassen

Bislang wurden nur Objekte vorgestellt, von denen man auch eine Objekt erstellen kann. Es kann jedoch sinnvoll sein gemeinsame Funktionalität in einer Klasse auszulagern, die man nicht direkt verwenden kann.

Beispiel:

Zugegeben, dass Beispiel ist eher theoretisch, aber es ist ganz gut um das Prinzip zu erklären. Eine Fahrrad, ein Auto und ein Polizeiauto sind im weitesten Sinne „Fahrzeuge“.


Dabei dient die Klasse Fahrzeug nur zur Zusammenfassung der gemeinsamen Eigenschaften. In diesem Fall die Melodie der Hupe.


Es macht keinen Sinn eine Instanz eines Fahrzeuges direkt zu erstellen. Das Schlüsselwort abstract verbietet es sogar.

Die Verwendung einer abstrakten Klasse macht Sinn wenn gemeinsame Funktionalität in eine Basisklasse auslagert werden kann und man diese nicht instanzieren können muss.

Abstrakte Methoden

Neben abstakten Klassen, kann man in einer Klasse auch abstrakte Methoden definieren. Das dient dazu, dass die erbende Klasse diese Methode implementieren muss. Es kann also mit einer abstrakten Methode eine Schnittstelle „erzwungen“ werden.


Eine abstrakte Methode in dem vorheringen Beispiel kann so aussehen:

Die Ausgabe ist die gleiche. Aber die Implementierung ist anders. In diesem Fall wird in der abstrakten Klasse festgelegt, dass jede Klasse die von „Vehicle“ erbt immer die Methode „getHornMelody“ implementieren muss.


Im vorherigen Beispiel hätte die Zuweisung der Melodie auch übersprungen werden können. In diesem Fall wird man jedoch dazu gezwungen die Methode zu implementieren. Dies ist sinnvoll wenn ein unterschiedliches Verhalten benötigt wird. Das Beispiel 1 bietet lediglich die Möglichkeit durch Zuweisung des attributes hornMelody die Melodie der Hupe zu ändern. Das Verhalten ist jedoch in der Basisklasse implementiert.

Bei der zweiten Variate ist das Verhalten in jedem Objekt implementiert und dadurch sind mehr Möglichkeiten gegeben.


Beide Varianten machen Sinn. Es kommt immer auf den Anwendungsfall an. Ich hoffe du konntest soweit folgen :)

Navigation