Code: Alles auswählen.
" Methoden sammeln
ref_help->read_methods( ref = me ).
Code: Alles auswählen.
LOOP AT ref_help->atr_zif_methods ASSIGNING <fs_methods>.
CONCATENATE <fs_methods>-ifname <fs_methods>-methodname
INTO methode SEPARATED BY '~'.
CALL METHOD me->(methode).
ENDLOOP.
Code: Alles auswählen.
REPORT.
CLASS parent DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: factory RETURNING VALUE(ro_parent) TYPE REF TO parent.
METHODS: test.
ENDCLASS.
CLASS child DEFINITION INHERITING FROM parent.
PUBLIC SECTION.
METHODS:child_test.
ENDCLASS.
START-OF-SELECTION.
DATA: test TYPE REF TO child.
test ?= parent=>factory( ).
CLASS parent IMPLEMENTATION.
METHOD test.
DATA: methname TYPE string.
methname = 'CHILD_TEST'.
CALL METHOD me->(methname).
ENDMETHOD.
METHOD factory.
CREATE OBJECT ro_parent TYPE child.
ro_parent->test( ).
ENDMETHOD.
ENDCLASS.
CLASS child IMPLEMENTATION.
METHOD child_test.
break-point.
ENDMETHOD.
ENDCLASS.
ABAP-Hilfe hat geschrieben:In Konstruktoren sind die Methoden von Unterklassen nicht sichtbar. Falls ein Instanzkonstruktor eine Instanzmethode der gleichen Klasse über die implizite Selbstreferenz ME-> aufruft, wird die Methode so aufgerufen, wie sie in der Klasse des Instanzkonstruktors implementiert ist und nicht die eventuell redefinierte Methode der zu instantiierenden Unterklasse. Dies ist eine Ausnahme von der Regel, daß beim Aufruf von Instanzmethoden immer die Implementierung in der Klasse aufgerufen wird, auf deren Instanz die Referenz gerade zeigt.
Ich habe doch schon die Instanz.black_adept hat geschrieben:Bau dir eine Methode, die "das Abloopen der Methoden" macht.
Verwende Design Pattern Factory:
In der Factory-Methode erzeugst du deine Klasse und rufst dann explizit die o.a. Methode auf. Da diese nun im Kontext von "me" läuft solltest du alles bekommen was du benötigst.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Icke0801
Ja, bleibt leider nix anderes übrig.a-dead-trousers hat geschrieben:Das ist leider so. Nimm es einfach als gegeben.
Ich habe das gestern mal testweise in eine Factory-Klasse gepackt. Erste kurze Tests haben funktioniert. Damit würde der Aufwand noch geringer, nämlich zentral an einer Stelle.a-dead-trousers hat geschrieben:Pack das "händeln" der Methoden in eine eigene (protected) Methode der SUPER-Klasse und rufe diese im CONSTRUCTOR der KIND-Klasse auf.
Das ist die einzige Möglichkeit die ich kenne, damit das funktioniert was du vor hast.
So ist zumindest die Menge an Code die du in jeder KIND-Klasse einbauen musst, überschaubar gering.
http://help.sap.com/saphelp_470/helpdata/de/dd/4049c40f4611d3b9380000e8353423/content.htm hat geschrieben:[...]
In Konstruktoren sind die Methoden von Unterklassen nicht sichtbar. Falls ein Instanzkonstruktor eine Instanzmethode der gleichen Klasse über die implizite Selbstreferenz ME-> aufruft, wird die Methode so aufgerufen, wie sie in der Klasse des Instanzkonstruktors implementiert ist und nicht die eventuell redefinierte Methode der zu instantiierenden Unterklasse. Dies ist eine Ausnahme von der Regel, daß beim Aufruf von Instanzmethoden immer die Implementierung in der Klasse aufgerufen wird, auf deren Instanz die Referenz gerade zeigt.
[...]