ich habe aktuell ein OO Problem.
Eine Superklasse soll dynamisch auf die Attribute (und auch Methoden) der Unterklassen zugreifen. Instanziiert wird natürlich die Unterklasse. Bisher habe ich das gelöst, in dem die Attribute der Unterklasse alle "Public" waren. Nun wollte ich dieses umgehen, indem ich die Unterklasse als "Friend" der Oberklasse angebe und die Attribute nur noch als "Protected" oder "Private" deklariere. Der Zugriff klappt so aber nicht.
Anbei zwei abstrakte Beispiele, wie sie aber genau so auf unserem System vorhanden sind:
Beispiel In Ordnung:
- Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
- Klasse_A
- Attribut VAR_A_1 TYPE Protected
- Methode METH_A_1 TYPE Public
- Klasse_B erbt von A
- Attribut VAR_B_1 TYPE Public
- Klasse_C erbt von B
- Attribut VAR_C_1 TYPE Public
- Quelltext Programm:
- Lc_Klasse TYPE REF TO Klasse_B
- CREAT OBJECT Lc_Klasse TYPE Klasse_C
- Lc_Klasse->METH_A_1( ).
- Quelltext METH_A_1:
- Ergebnis:
- Sy-subrc = 0
- <fs> is assigned
- GeSHi ©
Beispiel Problem
- Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
- Klasse_A (Friends: Klasse B und Klasse C)
- Attribut VAR_A_1 TYPE Protected
- Methode METH_A_1 TYPE Public
- Klasse_B erbt von A (Friends: Klasse B)
- Attribut VAR_B_1 TYPE Protected
- Klasse_C erbt von B
- Attribut VAR_C_1 TYPE Protected
- Quelltext Programm:
- Lc_Klasse TYPE REF TO Klasse_B
- CREAT OBJECT Lc_Klasse TYPE Klasse_C
- Lc_Klasse->METH_A_1( ).
- Quelltext METH_A_1:
- Ergebnis:
- Sy-subrc = 4
- <fs> is not assigned
- GeSHi ©
Durch die "Friends" Beziehung müsste doch der Zugriff genauso klappen, als wenn die Attribute "Public" sind, oder?