Du musst Dich nicht fuer eine Unterklasse entscheiden, Du musst die Unterklassen unterscheiden koennen.ralf.wenzel hat geschrieben:Moin.
Daran dachte ich auch -- dann muss ich mich aber für eine der Unterklassen entscheiden. Und genau das will ich eigentlich nicht.....
Unit605 hat geschrieben:Du musst Dich nicht fuer eine Unterklasse entscheiden, Du musst die Unterklassen unterscheiden koennen.ralf.wenzel hat geschrieben:Moin.
Daran dachte ich auch -- dann muss ich mich aber für eine der Unterklassen entscheiden. Und genau das will ich eigentlich nicht.....
Ich muss doch "objectunterklasse" deklarieren.... Also muss ich mich sehr wohl entscheiden.Unit605 hat geschrieben:Stichwort: Down cast
Objectunterklasse ?= Object.
Objectunterklasse->Attribut.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
ralf.wenzel
Code: Alles auswählen.
lr_verdeck type ref to zif_verdeck.
try.
lr_verdeck ?= ir_auto.
lr_verdeck->set_stofffarbe( 'rot' ).
catch.
endtry.
Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
ralf.wenzel
Code: Alles auswählen.
REPORT.
*----------------------------------------------------------------------*
* CLASS lcl_test DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_test DEFINITION.
PUBLIC SECTION.
CLASS-DATA: oberklasse TYPE char1 VALUE 'O'..
ENDCLASS. "lcl_test DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_test2 DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_test2 DEFINITION INHERITING FROM lcl_test.
PUBLIC SECTION.
CLASS-DATA: unterklasse TYPE char1 VALUE 'U'.
ENDCLASS. "lcl_test2 DEFINITION
DATA: lo_lcl TYPE REF TO lcl_test.
FIELD-SYMBOLS: <ls_attribute> TYPE ANY.
END-OF-SELECTION.
CREATE OBJECT lo_lcl TYPE lcl_test2.
WRITE:/ lcl_test=>oberklasse,
lcl_test2=>unterklasse.
* assign lo_lcl->unterklasse to <ls_attribute>. " Geht nicht, da zur Designzeit nicht bekannt ist, ob vom Typ der Unterklasse
ASSIGN ('LO_LCL->UNTERKLASSE') TO <ls_attribute>. " Geht jetzt, da zur Laufzeit der Typ (Unterklasse) bekannt ist.
IF sy-subrc = 0. " Klasse hatte das Attribut --> Feldsymbol wurde sauber zugewiesen
WRITE:/ <ls_attribute>.
ENDIF.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
ralf.wenzel