Casting i ABAP-programmet

KLASSE a1 DEFINISJON.
 OFFENTLIG SEKSJON.
 DATA: num1 TYPE i VERDI 100.
 METODER:m1.
 ENDKLASSE.
 KLASSE a1 IMPLEMENTERING.
 METODE m1.
 SKRIV: 'a1:',nummer1.
 SLUTTMETODE.
 ENDKLASSE.
 KLASSE b1 DEFINISJON ARVER FRA a1.
 OFFENTLIG SEKSJON.
 METODER:m2, m1 REDEFINISJON.
 ENDKLASSE.
 KLASSE b1 IMPLEMENTERING.
 METODE m1.
 num1 = num1 .
 SKRIV: 'b1:',nummer1.
 SLUTTMETODE.
 METODE m2.
 SKRIV: 'M2 i klasse b1'.
 SLUTTMETODE.
 ENDKLASSE.
 START-PÅ-UTVALG.
 DATA: en TYPE REF TIL a1.
 DATA: b TYPE REF TIL b1.
 *data: c skriv inn REF TIL c1.
 ************************************************** ************** LAG OBJEKT b.
 a = b.  "upcasting CALL METODE a->m1( ).
 *kall METODE a->m2( ).  "Vi kan ikke få tilgang til de egne underklassemetodene ved å bruke superklasseref.
 NY LINJE.
 b ?= a.  " nedstøping CALL METODE b->m1( ).
 NY LINJE.
 ANRINGSMETODE b->m2( ).
 ************************************************** *************** " error null ref opprette OBJEKT a.
 b ?= a.  "down casting fortsatt det gir dump call METODE b->m1( ).
 ************************************************** *************** LAG OBJEKT a.
 PRØVE.
 b ?= a.  "Du forsøkte å bruke en 'NULL' objektreferansedump CATCH cx_sy_move_cast_error.
 ANRINGSMETODE b->m1( ).
 SLUTT.
 ************************************************** *************** LAG OBJEKT a.
 LAG OBJEKT b.
 PRØVE.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 ANRINGSMETODE b->m1( ).
 kall METODE b->m2( ).
 SLUTT.
 KLASSE lcl_form DEFINISJON.
 OFFENTLIG SEKSJON.
 METODER trekke.
 ENDKLASSE.
 KLASSE lcl_sirkel DEFINISJON ARVER FRA lcl_form.
 OFFENTLIG SEKSJON.
 METODER: tegn REDEFINISJON, calc_area.
 ENDKLASSE.
 KLASSE lcl_shape IMPLEMENTERING.
 METODE trekning.
 SKRIV :/ 'Tegne hvilken som helst form'.
 SLUTTMETODE.
 ENDKLASSE.
 IMPLEMENTERING AV KLASSE lcl_sirkel.
 METODE trekning.
 SKRIV :/ 'Tegner spesifikk form: Sirkel'.
 SLUTTMETODE.
 METODE calc_area.
 SKRIV :/ 'Area Of Crcle = 2iiR'.
 SLUTTMETODE.
 ENDKLASSE.
 START-PÅ-UTVALG.
 DATA : o_cir TYPE REF TIL lcl_sirkel.
 LAG OBJEKT o_cir.
 CALL METODE o_cir->draw( ).  " kaller opp underklassen Draw()-metoden CALL METHOD o_cir->calc_area( ).
 ULINE.
 "--------- Smal cast(Upcast)--------------" DATA : o_shp TYPE REF TIL lcl_shape.
 o_shp = o_cir.  " Smal cast(Upcast) CALL METODE o_shp->draw( ).  " kaller underklassen Draw()-metoden "kall METODE o_shp->calc_area( ) .  " kompileringsfeil ULINE.
 "--------- Widening Cast (Downcast) -----------" DATA : o_cir1 TYPE REF TIL lcl_circle.
 " o_cir1 = o_shp.  "kompilasjonsfeil o_cir1 ?= o_shp.  " Utvidelse av cast (nedkast) CALL METODE o_cir1->draw( ).  " kaller opp underklassen Draw()-metoden CALL METHOD o_cir1->calc_area( ).
 KLASSE a1 DEFINISJON.
 OFFENTLIG SEKSJON.
 DATA: num1 TYPE i VERDI 100.
 METODER:m1.
 ENDKLASSE.
 KLASSE a1 IMPLEMENTERING.
 METODE m1.
 SKRIV: 'a1:',nummer1.
 SLUTTMETODE.
 ENDKLASSE.
 KLASSE b1 DEFINISJON ARVER FRA a1.
 OFFENTLIG SEKSJON.
 METODER:m2, m1 REDEFINISJON.
 ENDKLASSE.
 KLASSE b1 IMPLEMENTERING.
 METODE m1.
 num1 = num1 .
 SKRIV: 'b1:',nummer1.
 SLUTTMETODE.
 METODE m2.
 SKRIV: 'M2 i klasse b1'.
 SLUTTMETODE.
 ENDKLASSE.
 START-PÅ-UTVALG.
 DATA: overordnet TYPE REF TIL a1.
 DATA: underordnet TYPE REF TIL b1.
 *data: c skriv inn REF TIL c1.
 ************************************************** ************** LAG OBJEKT barn.
 forelder = barn.  "upcasting CALL METHOD parent->m1( ).
 KALLEMETODE barn->m1( ).
 KALLEMETODE barn->m2( ).
 *kall METODE a->m2( ).  "Vi kan ikke få tilgang til de egne underklassemetodene ved å bruke superklasseref.
 NY LINJE.
 barn ?= forelder.  " down casting CALL METODE barn->m1( ).
 NY LINJE.
 KALLEMETODE barn->m2( ).
 ************************************************** **************** *" error null ref *opprett OBJECT a.
 *b ?= a.  "nedstøping fortsatt det gir dump *kall METODE b->m1( ).
 ************************************************** **************** * LAG OBJEKT a.
 PRØVE.
 b ?= a.  "Du forsøkte å bruke en 'NULL' objektreferansedump CATCH cx_sy_move_cast_error.
 ANRINGSMETODE b->m1( ).
 SLUTT.
 ************************************************** **************** * LAG OBJEKT a.
 LAG OBJEKT b.
 PRØVE.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 ANRINGSMETODE b->m1( ).
 kall METODE b->m2( ).
 SLUTT.
 ******** Unike verdier****************** DATA : lv_string TYPE-streng, lv_string2 TYPE-streng, lv_string_final TYPE-streng.
 TYPES: 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 ',' INTO TABLE lt_user2.
 LOOP AT lt_user2 TILDELING FELTSYMBOL( ).
 SETT INN INTO TABELL lt_user.
 ENDLOOP.
 SORT lt_user BY auth.
 SLETT TILSTENDENDE DUBLIKATER FRA lt_user SAMMENLIGNING av auth.
 IF sy-subrc = 0.
 LOOP AT lt_user TILDELER FELTSYMBOL( ).
 HVIS lv_string_final ER INITIAL.
 lv_string_final = -auth.
 ELLERS.
 CONCATENATE lv_string_final -auth INTO lv_string_final SEPARERT AV ','.
 SLUTT OM.
 ENDLOOP.
 SLUTT OM.

 

Legg igjen en kommentar

Dette nettstedet bruker Akismet for å redusere spam. Lær hvordan kommentaren din behandles.