public-, protected-, private-Ableitungen

Bei der Deklaration der kasten-Klasse dürfte schon das Schlüsselwort public vor der Nennung der Basisklasse aufgefallen sein. Es handelt sich hierbei um die Art der Ableitung. Völlig analog zur Deklaration der Elemente und Methoden wird hierbei definiert, wie die Basisklasse nach außen und bezüglich weiterer Ableitungen auftreten sollen. Bei einer protected-Ableitung werden public- und protected-Elemente und -Methoden der Basisklasse zu protected-Elementen und -Methoden, so daß auf sie zwar in weiteren Ableitungen zugegriffen werden kann, nicht aber von außen. Wird die Art der Ableitung nicht näher spezifiziert, so wird standardmäßig public abgeleitet.

Die public-Ableitung sollte auch im Regelfall benutzt werden. Nur sie realisiert eine wirkliche "ist ein"-Beziehung, wie sie in der Methodik der Vererbung vorgesehen ist. Eine abgeleitete Klasse sollte um eine Ableitung zu rechtfertigen immer eine "ist ein"-Beziehung haben. So ist ein Kasten ein Grafikobjekt und die Ableitung macht Sinn. Auch alle Eigenschaften werden vererbt.

Bei einer private-Ableitung hingegen erscheinen die Methoden und Elemente der Basisklasse nach außen hin nicht. Man kann nur indirekt auf diese zugreifen. So ist dann auch im Grunde keine "ist ein"-Beziehung mehr gegeben.

Meist wenn keine "ist ein"-Beziehung vorhanden ist, ist es angebrachter ein Objekt der Basisklasse als Element in eine neue Klasse aufzunehmen. So macht es z.B. keinen Sinn eine Personenklasse von einer Adresse abzuleiten. Eine Person "ist" keine Adresse, sondern sie "hat" eine. So sollte eine Adresse ein Element einer Person sein.