Casting im ABAP-Programm

KLASSE a1 DEFINITION.
 ÖFFENTLICHER ABSCHNITT.
 DATEN: num1 TYP i WERT 100.
 METHODEN:m1.
 ENDKLASSE.
 KLASSE A1 UMSETZUNG.
 METHODE m1.
 SCHREIBEN: 'a1:',num1.
 ENDMETHODE.
 ENDKLASSE.
 KLASSE b1 DEFINITION, DIE VON a1 erbt.
 ÖFFENTLICHER ABSCHNITT.
 METHODEN: m2, m1 NEUDEFINITION.
 ENDKLASSE.
 UMSETZUNG DER KLASSE b1.
 METHODE m1.
 Zahl1 = Zahl1 .
 SCHREIBEN: 'b1:',num1.
 ENDMETHODE.
 METHODE m2.
 SCHREIBEN: 'M2 in Klasse b1'.
 ENDMETHODE.
 ENDKLASSE.
 START-DER-AUSWAHL.
 DATEN: a TYP REF BIS a1.
 DATEN: b TYP REF BIS b1.
 *Daten: c-Typ REF TO c1.
 ************************************************* ************** OBJEKT ERSTELLEN b.
 a = b.  "Upcasting CALL METHOD a->m1( ).
 *Methode aufrufen a->m2( ).  " Wir können nicht auf die eigenen Unterklassenmethoden mit Superklassenref zugreifen.
 NEUE ZEILE.
 b?= a.  " Downcasting CALL METHOD b->m1( ).
 NEUE ZEILE.
 AUFRUFMETHODE b->m2( ).
 ************************************************* ************** " error null ref OBJEKT erstellen a.
 b?= a.  "Downcasting immer noch sein gebender Dump-Aufruf METHOD b->m1( ).
 ****************************************************** ************** OBJEKT ERSTELLEN a.
 VERSUCHEN.
 b?= a.  "Sie haben versucht, einen 'NULL'-Objektreferenz-Dump CATCH cx_sy_move_cast_error zu verwenden.
 AUFRUFMETHODE b->m1( ).
 ENDE.
 ****************************************************** ************** OBJEKT ERSTELLEN a.
 OBJEKT ERSTELLEN b.
 VERSUCHEN.
 b?= a.
 CATCH cx_sy_move_cast_error.
 AUFRUFMETHODE b->m1( ).
 rufen Sie METHODE b->m2( ) auf.
 ENDE.
 KLASSE lcl_shape DEFINITION.
 ÖFFENTLICHER ABSCHNITT.
 METHODEN zeichnen.
 ENDKLASSE.
 CLASS lcl_circle DEFINITION, DIE VON lcl_shape erbt.
 ÖFFENTLICHER ABSCHNITT.
 METHODEN: REDEFINITION zeichnen, calc_area.
 ENDKLASSE.
 KLASSE lcl_shape IMPLEMENTATION.
 METHODE zeichnen.
 WRITE :/ 'Beliebige Form zeichnen'.
 ENDMETHODE.
 ENDKLASSE.
 KLASSE lcl_circle IMPLEMENTIERUNG.
 METHODE zeichnen.
 WRITE :/ 'Zeichnung einer bestimmten Form: Kreis'.
 ENDMETHODE.
 METHODE calc_area.
 SCHREIBEN :/ 'Bereich von Crcle = 2iiR'.
 ENDMETHODE.
 ENDKLASSE.
 START-DER-AUSWAHL.
 DATEN : o_cir TYPE REF TO lcl_circle.
 OBJEKT ERSTELLEN o_cir.
 AUFRUF METHODE o_cir->draw( ).  " ruft die Draw()-Methode der Unterklasse CALL METHOD o_cir->calc_area( ) auf.
 ULINE.
 "--------- Schmaler Cast (Upcast)--------------" DATA : o_shp TYPE REF TO lcl_shape.
 o_shp = o_cir.  " Enge Besetzung(Upcast) CALL METHOD o_shp->draw( ).  " ruft die Methode Draw() der Unterklasse "call METHOD o_shp->calc_area() auf.  " Kompilierungsfehler ULINE.
 "---------- Widening Cast (Downcast) -----------" DATEN: o_cir1 TYPE REF TO lcl_circle.
 " o_cir1 = o_shp.  " Kompilierungsfehler o_cir1 ?= o_shp.  " Erweiterung der Besetzung (Downcast) CALL METHOD o_cir1->draw( ).  " ruft die Draw()-Methode der Unterklasse CALL METHOD o_cir1->calc_area( ) auf.
 KLASSE a1 DEFINITION.
 ÖFFENTLICHER ABSCHNITT.
 DATEN: num1 TYP i WERT 100.
 METHODEN:m1.
 ENDKLASSE.
 KLASSE A1 UMSETZUNG.
 METHODE m1.
 SCHREIBEN: 'a1:',num1.
 ENDMETHODE.
 ENDKLASSE.
 KLASSE b1 DEFINITION, DIE VON a1 erbt.
 ÖFFENTLICHER ABSCHNITT.
 METHODEN: m2, m1 NEUDEFINITION.
 ENDKLASSE.
 UMSETZUNG DER KLASSE b1.
 METHODE m1.
 Zahl1 = Zahl1 .
 SCHREIBEN: 'b1:',num1.
 ENDMETHODE.
 METHODE m2.
 SCHREIBEN: 'M2 in Klasse b1'.
 ENDMETHODE.
 ENDKLASSE.
 START-DER-AUSWAHL.
 DATEN: Elterntyp REF TO a1.
 DATEN: Kind TYP REF BIS b1.
 *Daten: c-Typ REF TO c1.
 ************************************************* ************* OBJEKT ERSTELLEN Kind.
 Elternteil = Kind.  "Upcasting CALL METHOD parent->m1( ).
 CALL METHOD child->m1( ).
 CALL METHOD child->m2( ).
 *Methode aufrufen a->m2( ).  " Wir können nicht auf die eigenen Unterklassenmethoden mit Superklassenref zugreifen.
 NEUE ZEILE.
 Kind ?= Elternteil.  " Downcasting CALL METHOD child->m1( ).
 NEUE ZEILE.
 CALL METHOD child->m2( ).
 ************************************************* **************** *" error null ref *erzeuge OBJEKT a.
 *b ?= a.  "Downcasting immer noch sein gebender Dump *call METHOD b->m1( ).
 ************************************************* **************** * OBJEKT ERSTELLEN a.
 VERSUCHEN.
 b?= a.  "Sie haben versucht, einen 'NULL'-Objektreferenz-Dump CATCH cx_sy_move_cast_error zu verwenden.
 AUFRUFMETHODE b->m1( ).
 ENDE.
 ************************************************* **************** * OBJEKT ERSTELLEN a.
 OBJEKT ERSTELLEN b.
 VERSUCHEN.
 b?= a.
 CATCH cx_sy_move_cast_error.
 AUFRUFMETHODE b->m1( ).
 rufen Sie METHODE b->m2( ) auf.
 ENDE.
 ******** Eindeutige Werte******************** DATA : lv_string TYPE-String, lv_string2 TYPE-String, lv_string_final TYPE-String.
 TYPEN: BEGIN OF ty_data, auth TYPE c, END OF ty_data.
 DATEN: ls_user TYPE ty_data, ls_user2 TYPE ty_data, lt_user2 TYPE TABLE OF ty_data, lt_user TYPE TABLE OF ty_data.
 lv_string = 'a,b,c,a'.
 lv_string2 = 'd,b,c,a'.
 SPLIT lv_string AT ',' INTO TABLE lt_user.
 SPLIT lv_string2 AT ',' INTO TABLE lt_user2.
 LOOP AT lt_user2 ZUORDNUNG FELDSYMBOL( ).
 EINFÜGEN INTO TABLE lt_user.
 ENDSCHLEIFE.
 SORT lt_user NACH auth.
 LÖSCHEN SIE ANGRENZENDE DUPLIKATE AUS lt_user VERGLEICH auth.
 WENN sy-subrc = 0.
 LOOP AT lt_user ASSIGNING FIELD-SYMBOL( ).
 WENN lv_string_final INITIAL IST.
 lv_string_final = -auth.
 SONST.
 VERBINDEN lv_string_final -auth INTO lv_string_final GETRENNT DURCH ','.
 ENDIF.
 ENDSCHLEIFE.
 ENDIF.

 

Hinterlassen Sie eine Nachricht

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahren Sie, wie Ihre Kommentardaten verarbeitet werden.