Ansicht
Dokumentation
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 StructureDiese Dokumentation steht unter dem Copyright der SAP AG.
- 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 )