Casting i ABAP-programmet

KLASS a1 DEFINITION.
 OFFENTLIG AVSNITT.
 DATA: num1 TYP i VÄRDE 100.
 METODER:m1.
 SLUTKLASS.
 KLASS a1 GENOMFÖRANDE.
 METOD m1.
 SKRIV: 'a1:',nummer1.
 SLUTMETOD.
 SLUTKLASS.
 KLASS b1 DEFINITION ÄRVANDE FRÅN a1.
 OFFENTLIG AVSNITT.
 METODER:m2, m1 REDEFINERING.
 SLUTKLASS.
 KLASS b1 GENOMFÖRANDE.
 METOD m1.
 num1 = num1 .
 SKRIV: 'b1:',nummer1.
 SLUTMETOD.
 METOD m2.
 SKRIV: 'M2 i klass b1'.
 SLUTMETOD.
 SLUTKLASS.
 START-PÅ-URVAL.
 DATA: en TYP REF TILL a1.
 DATA: b TYP REF TILL b1.
 *data: c skriv REF TO c1.
 ************************************************** ************** SKAPA OBJEKT b.
 a = b.  "upcasting CALL METHOD a->m1( ).
 *ring METOD a->m2( ).  "Vi kan inte komma åt de egna underklassmetoderna med superklassref.
 NY LINJE.
 b ?= a.  " nedgjutning CALL METOD b->m1( ).
 NY LINJE.
 UPPRINGSMETOD b->m2( ).
 ************************************************** *************** " error null ref skapa OBJEKT a.
 b ?= a.  "down casting still det ger dump call METOD b->m1( ).
 ************************************************** *************** SKAPA OBJEKT a.
 PROVA.
 b ?= a.  "Du försökte använda en 'NULL' objektreferensdump CATCH cx_sy_move_cast_error.
 UPPRINGSMETOD b->m1( ).
 SLUTA.
 ************************************************** *************** SKAPA OBJEKT a.
 SKAPA OBJEKT b.
 PROVA.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 UPPRINGSMETOD b->m1( ).
 anrop METOD b->m2( ).
 SLUTA.
 KLASS lcl_form DEFINITION.
 OFFENTLIG AVSNITT.
 METODER dra.
 SLUTKLASS.
 KLASS lcl_cirkel DEFINITION ÄRVANDE FRÅN lcl_form.
 OFFENTLIG AVSNITT.
 METODER: rita omdefinition, calc_area.
 SLUTKLASS.
 KLASS lcl_shape IMPLEMENTERING.
 METOD dra.
 SKRIV :/ 'Rita valfri form'.
 SLUTMETOD.
 SLUTKLASS.
 KLASS lcl_circle IMPLEMENTERING.
 METOD dra.
 SKRIV :/ 'Rita specifik form: Cirkel'.
 SLUTMETOD.
 METOD calc_area.
 SKRIV :/ 'Area Of Crcle = 2iiR'.
 SLUTMETOD.
 SLUTKLASS.
 START-PÅ-URVAL.
 DATA : o_cir TYPE REF TILL lcl_cirkel.
 SKAPA OBJEKT o_cir.
 CALL METOD o_cir->draw( ).  " anropar subklass Draw()-metoden CALL METHOD o_cir->calc_area( ).
 ULINE.
 "--------- Narrow cast(Upcast)---------------------" DATA : o_shp TYPE REF TILL lcl_shape.
 o_shp = o_cir.  " Narrow cast (Upcast) CALL METOD o_shp->draw( ).  " anropar underklassen Draw()-metoden "anrop METHOD o_shp->calc_area( ) .  " kompileringsfel ULINE.
 "--------- Widening Cast (Downcast) -----------" DATA : o_cir1 TYP REF TILL lcl_circle.
 " o_cir1 = o_shp.  " kompileringsfel o_cir1 ?= o_shp.  " Bredda cast(Downcast) CALL METOD o_cir1->draw( ).  " anropar underklass Draw()-metoden CALL METHOD o_cir1->calc_area( ).
 KLASS a1 DEFINITION.
 OFFENTLIG AVSNITT.
 DATA: num1 TYP i VÄRDE 100.
 METODER:m1.
 SLUTKLASS.
 KLASS a1 GENOMFÖRANDE.
 METOD m1.
 SKRIV: 'a1:',nummer1.
 SLUTMETOD.
 SLUTKLASS.
 KLASS b1 DEFINITION ÄRVANDE FRÅN a1.
 OFFENTLIG AVSNITT.
 METODER:m2, m1 REDEFINERING.
 SLUTKLASS.
 KLASS b1 GENOMFÖRANDE.
 METOD m1.
 num1 = num1 .
 SKRIV: 'b1:',nummer1.
 SLUTMETOD.
 METOD m2.
 SKRIV: 'M2 i klass b1'.
 SLUTMETOD.
 SLUTKLASS.
 START-PÅ-URVAL.
 DATA: förälder TYP REF TILL a1.
 DATA: barn TYP REF TILL b1.
 *data: c skriv REF TO c1.
 ************************************************** ************** SKAPA OBJEKT barn.
 förälder = barn.  "upcasting CALL METHOD parent->m1( ).
 CALL METOD barn->m1( ).
 CALL METOD barn->m2( ).
 *ring METOD a->m2( ).  "Vi kan inte komma åt de egna underklassmetoderna med superklassref.
 NY LINJE.
 barn ?= förälder.  " nedkastning CALL METOD barn->m1( ).
 NY LINJE.
 CALL METOD barn->m2( ).
 ************************************************** **************** *" error null ref *skapa OBJECT a.
 *b ?= a.  "nedgjutning fortfarande ger dumpning *call METOD b->m1( ).
 ************************************************** **************** * SKAPA OBJEKT a.
 PROVA.
 b ?= a.  "Du försökte använda en 'NULL' objektreferensdump CATCH cx_sy_move_cast_error.
 UPPRINGSMETOD b->m1( ).
 SLUTA.
 ************************************************** **************** * SKAPA OBJEKT a.
 SKAPA OBJEKT b.
 PROVA.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 UPPRINGSMETOD b->m1( ).
 anrop METOD b->m2( ).
 SLUTA.
 ******** Unika värden****************** DATA : lv_string TYPE sträng, lv_string2 TYPE sträng, lv_string_final TYPE sträng.
 TYP: BEGIN OF ty_data, auth TYPE c, END OF ty_data.
 DATA: 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 ',' I TABELL lt_user2.
 LOOP AT lt_user2 TILLDELA FÄLTSYMBOL( ).
 FÖRA IN INTO TABELL lt_user.
 ENDLOOP.
 SORTERA lt_user BY auth.
 RADERA VID INSTÄNDANDE DUBLIKATER FRÅN lt_user JÄMFÖR auth.
 OM sy-subrc = 0.
 LOOP AT lt_user TILLDELA FÄLTSYMBOL( ).
 OM lv_string_final ÄR INITIAL.
 lv_string_final = -auth.
 ANNAN.
 CONCATENATE lv_string_final -auth INTO lv_string_final SEPARAT AV ','.
 ENDIF.
 ENDLOOP.
 ENDIF.

 

Lämna en kommentar

Den här sidan använder Akismet för att minska spam. Läs om hur din kommentardata behandlas.