Ansicht
Dokumentation

ABENINHERITANCE_INSTANTIATION - INHERITANCE INSTANTIATION

ABENINHERITANCE_INSTANTIATION - INHERITANCE INSTANTIATION

SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- Vererbung und Instanziierung

Die Instanziierung einer Unterklasse bedeutet gleichzeitig die Instanziierung sämtlicher Oberklassen, wobei die Initialisierung der Oberklassenattribute durch den Aufruf der Oberklassenkonstruktoren wie in Vererbung und Konstruktoren beschrieben sicher gestellt wird.

Die Zusätze CREATE PUBLIC$|PROTECTED$|PRIVATE der Anweisung CLASS steuern für jede einzelne Klasse, wer eine Instanz der Klasse erzeugen oder, mit anderen Worten, ihren Instanzkonstruktor aufrufen darf.

Dies hat folgende Auswirkungen:

Wenn in einem Pfad des Vererbungsbaums eine Oberklasse mit dem Zusatz CREATE PRIVATE definiert wurde, kann keine Unterklasse von äußeren Verwendern instanziiert werden und eine Unterklasse kann sich nicht einmal selbst instanziieren, da sie keinen Zugriff auf den Instanzkonstruktor der Oberklasse hat!

Es bietet sich also an, eine Klasse, die mit dem Zusatz CREATE PRIVATE definiert wird, gleichzeitig mit dem Zusatz FINAL zu versehen, um eine Ableitung von Unterklassen zu verhindern. Ansonsten sind Unterklassen solcher Oberklassen gleichsam mit einem impliziten Zusatz CREATE NONE versehen.

Ausnahmen von dieser Regel gibt es nur, wenn eine privat instanziierbare Oberklasse ihren Unterklassen die Freundschaft anbietet. Der direkte Weg ist hier eher der seltene Fall, da die Oberklasse dafür ihre Unterklassen kennen müsste. Eine Oberklasse kann aber auch einem Interface die Freundschaft anbieten, das dann wiederum von ihren Unterklassen implementiert werden kann.

Umgekehrt können auch in Oberklassen keine Objekte ihrer Unterklassen erzeugt werden, wenn diese mit CREATE PROTECTED oder CREATE PRIVATE deklariert sind, außer sie sind Freunde ihrer Unterklassen.

Zusammenstellung der möglichen Fälle

Oberklasse mit keinem Zusatz oder CREATE PUBLIC.

Unterklassen, ob Freund der Oberklasse oder nicht können jeden CREATE-Zusatz haben. Ohne Zusatz erben sie die Eigenschaft CREATE PUBLIC. Der Instanzkonstruktor der Oberklasse ist jedem sichtbar. Die Unterklasse steuert die Sichtbarkeit ihres eigenen Instanzkonstruktors unabhängig von der Oberklasse.

Oberklasse mit Zusatz CREATE PROTECTED.

Unterklassen, ob Freund der Oberklasse oder nicht können jeden CREATE-Zusatz haben. Ohne Zusatz erben sie die Eigenschaft CREATE PROTECTED. Die Oberklasse erlaubt ihren Unterklassen die uneingeschränkte Instanziierung und damit auch die Veröffentlichung ihres geschützten Instanzkonstruktors.

Oberklasse mit Zusatz CREATE PRIVATE.

Unterklasse ist kein Freund der Oberklasse

Die Unterklasse hat den impliziten Zusatz CREATE NONE. Da niemand außer der Oberklasse selbst ihren Instanzkonstruktor aufrufen darf, ist die Unterklasse nicht instanziierbar. Es ist keiner der CREATE-Zusätze erlaubt, da dies in jedem Fall eine unerlaubte Veröffentlichung des Oberklassenkonstruktors bedeuten würde.

Unterklasse ist Freund der Oberklasse

Falls sie keinen Zusatz hat erbt sie die Eigenschaft CREATE PRIVATE. Es sind aber alle CREATE-Zusätze erlaubt. Als Freund darf eine Unterklasse den eigentlich privaten Konstruktor der Oberklasse in beliebiger Form veröffentlichen.






SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   PERFORM Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 3986 Date: 20240523 Time: 153417     sap01-206 ( 75 ms )