Abstrakte Basisklassen

Ein besonderer Fall für Vererbung tritt dann ein, wenn man zwar eine Reihe von Objekten modellieren möchte, die gemeinsame Eigenschaften haben, aber keine direkten Beziehung zwischen den Objekten findet. Wenn man z.B. eine Klasse haben möchte, die ein Auto beschreibt, und eine andere, die ein Motorrad beschreibt, so findet man sicherlich viele Gemeinsamkeiten, aber weder ist ein Auto ein Motorrad, noch umgekehrt.

Damit macht es keinen Sinn, eine der beiden Klassen von der anderen abzuleiten. Trotzdem wäre es wünschenswert, eine gemeinsame Basisklasse zu haben, die die gemeinsamen Eigenschaften widerspiegelt. Damit könnte man zum einen Programmieraufwand bei der Erstellung der Klassen sparen, da man vieles nur einmal statt mehrfach schreibt. Zum anderen ist eine nachträgliche Änderung leichter durchzuführen, da man diese nur an einer Stelle machen muß. Eine Änderung von zwei Klassen ist zwar auch noch überschaubar, aber wenn die Klassenhierarchie größer ausfällt - und sei es durch spätere Programmerweiterungen - dann kann es schon schwierig werden, alle Stellen im Programm zu suchen, an denen geändert werden muß.

Was wäre in unserem Beispiel denn eine mögliche gemeinsame Basisklasse? Oder anders gefragt: Was sind denn sowohl Auto als auch Motorrad? Beide sind Maschinen, aber das würde viele gemeinsame Eigenschaften außen vor lassen, so z.B. die Eigenschaft 'kann fahren'. Sinnvoll ist es, eine Klasse zu finden, der beide angehören, aber die möglichst viele (am besten alle) der gemeinsamen Eigenschaften vereint. Dies wäre hier so etwas wie eine Klasse Fahrzeug (im Sinne von Landfahrzeug mit Rädern), denn sowohl Auto als auch Motorrad sind Fahrzeuge im obigen Sinne und alle gemeinsamen Eigenschaften der beiden sollten in dieser Klasse vereinbar sein.

Bei einer Implementierung in OOP könnte man daher eine Fahrzeugklasse modellieren, von der dann die beiden anderen abgeleitet werden. Diese Klasse soll aber nicht instanziert werden, d.h. ihr selbst sollen keine Daten zugehören - sie dient einzig dem Zweck, Basisklasse für andere zu sein. Daher nennt man sie eine Abstrakte Basisklasse.