Casting i ABAP-programmet

KLASSE a1 DEFINITION.
 OFFENTLIG AFDELING.
 DATA: num1 TYPE i VÆRDI 100.
 METODER: m1.
 ENDKLASSE.
 KLASSE a1 IMPLEMENTERING.
 METODE m1.
 SKRIV: 'a1:',nummer1.
 SLUTMETODE.
 ENDKLASSE.
 KLASSE b1 DEFINITION ARVER FRA a1.
 OFFENTLIG AFDELING.
 METODER:m2, m1 REDEFINITION.
 ENDKLASSE.
 KLASSE b1 IMPLEMENTERING.
 METODE m1.
 num1 = num1.
 SKRIV: 'b1:',nummer1.
 SLUTMETODE.
 METODE m2.
 SKRIV: 'M2 i klasse b1'.
 SLUTMETODE.
 ENDKLASSE.
 START-AF-UDVALG.
 DATA: en TYPE REF TIL a1.
 DATA: b TYPE REF TIL b1.
 *data: c skriv REF TO c1.
 ************************************************** ************** OPRET OBJEKT b.
 a = b.  "upcasting CALL METHOD a->m1( ).
 *kald METODE a->m2( ).  "Vi kan ikke få adgang til de egne underklassemetoder ved hjælp af superklasseref.
 NY LINJE.
 b ?= a.  " nedstøbning CALL METODE b->m1( ).
 NY LINJE.
 OPKALDSMETODE b->m2( ).
 ************************************************** *************** " fejl null ref opret OBJECT a.
 b ?= a.  "down casting stadig giver dump call METODE b->m1( ).
 ************************************************** *************** OPRET OBJECT a.
 PRØVE.
 b ?= a.  "Du har forsøgt at bruge en 'NULL' objektreferencedump CATCH cx_sy_move_cast_error.
 OPKALDSMETODE b->m1( ).
 SLUTNING.
 ************************************************** *************** OPRET OBJECT a.
 OPRET OBJEKT b.
 PRØVE.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 OPKALDSMETODE b->m1( ).
 kalde METODE b->m2( ).
 SLUTNING.
 KLASSE lcl_shape DEFINITION.
 OFFENTLIG AFDELING.
 METODER tegne.
 ENDKLASSE.
 KLASSE lcl_cirkel DEFINITION ARVER FRA lcl_form.
 OFFENTLIG AFDELING.
 METODER: tegn REDEFINITION, calc_area.
 ENDKLASSE.
 KLASSE lcl_shape IMPLEMENTERING.
 METODE tegning.
 SKRIV :/ 'Tegner enhver form'.
 SLUTMETODE.
 ENDKLASSE.
 KLASSE lcl_cirkel IMPLEMENTERING.
 METODE tegning.
 SKRIV :/ 'Tegning af specifik form: Cirkel'.
 SLUTMETODE.
 METODE calc_area.
 SKRIV :/ 'Area Of Crcle = 2iiR'.
 SLUTMETODE.
 ENDKLASSE.
 START-AF-UDVALG.
 DATA : o_cir TYPE REF TIL lcl_cirkel.
 OPRET OBJECT o_cir.
 OPKALDSMETODE o_cir->draw( ).  " kalder underklassen Draw() metode 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( ).  " kalder underklassen Draw()-metoden "kald METHOD o_shp->calc_area( ) .  " kompileringsfejl ULINE.
 "---------- Udvidelse af Cast (Downcast) -----------" DATA : o_cir1 TYPE REF TIL lcl_circle.
 " o_cir1 = o_shp.  " kompileringsfejl o_cir1 ?= o_shp.  " Udvidelse af Cast(Downcast) CALL METODE o_cir1->draw( ).  " kalder underklassen Draw() metode CALL METHOD o_cir1->calc_area( ).
 KLASSE a1 DEFINITION.
 OFFENTLIG AFDELING.
 DATA: num1 TYPE i VÆRDI 100.
 METODER: m1.
 ENDKLASSE.
 KLASSE a1 IMPLEMENTERING.
 METODE m1.
 SKRIV: 'a1:',nummer1.
 SLUTMETODE.
 ENDKLASSE.
 KLASSE b1 DEFINITION ARVER FRA a1.
 OFFENTLIG AFDELING.
 METODER:m2, m1 REDEFINITION.
 ENDKLASSE.
 KLASSE b1 IMPLEMENTERING.
 METODE m1.
 num1 = num1.
 SKRIV: 'b1:',nummer1.
 SLUTMETODE.
 METODE m2.
 SKRIV: 'M2 i klasse b1'.
 SLUTMETODE.
 ENDKLASSE.
 START-AF-UDVALG.
 DATA: overordnet TYPE REF TIL a1.
 DATA: underordnet TYPE REF TIL b1.
 *data: c skriv REF TO c1.
 ************************************************** ************** OPRET OBJEKT barn.
 forælder = barn.  "upcasting CALL METHOD parent->m1( ).
 OPKALDSMETODE barn->m1( ).
 OPKALDSMETODE barn->m2( ).
 *kald METODE a->m2( ).  "Vi kan ikke få adgang til de egne underklassemetoder ved hjælp af superklasseref.
 NY LINJE.
 barn ?= forælder.  " down casting CALL METHODE barn->m1( ).
 NY LINJE.
 OPKALDSMETODE barn->m2( ).
 ************************************************** **************** *" fejl null ref *opret OBJECT a.
 *b ?= a.  "nedstøbning stadig giver dump *kald METODE b->m1( ).
 ************************************************** **************** * OPRET OBJEKT a.
 PRØVE.
 b ?= a.  "Du har forsøgt at bruge en 'NULL' objektreferencedump CATCH cx_sy_move_cast_error.
 OPKALDSMETODE b->m1( ).
 SLUTNING.
 ************************************************** **************** * OPRET OBJEKT a.
 OPRET OBJEKT b.
 PRØVE.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 OPKALDSMETODE b->m1( ).
 kalde METODE b->m2( ).
 SLUTNING.
 ******** Unikke værdier****************** 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 TABEL OF ty_data, lt_user TYPE TABEL OF ty_data.
 lv_string = 'a,b,c,a'.
 lv_string2 = 'd,b,c,a'.
 SPLIT lv_streng AT ',' INTO TABLE lt_user.
 SPLIT lv_string2 AT ',' INTO TABLE lt_user2.
 LOOP AT lt_user2 TILDELING AF FELTSYMBOL( ).
 INDSÆT INTO TABLE lt_user.
 ENDLOOP.
 SORT lt_user BY auth.
 SLET TILSTÆNDENDE DUBLIKATER FRA lt_user SAMMENLIGNING Auth.
 HVIS sy-subrc = 0.
 LOOP AT lt_user TILDELING AF FELT-SYMBOL( ).
 HVIS lv_string_final ER INITIAL.
 lv_string_final = -auth.
 ANDET.
 CONCATENATE lv_string_final -auth INTO lv_string_final SEPARAT AF ','.
 AFSLUT HVIS.
 ENDLOOP.
 AFSLUT HVIS.

 

Efterlad en kommentar

Dette websted bruger Akismet til at reducere spam. Lær, hvordan dine kommentardata behandles.