Casting v programe ABAP

DEFINÍCIA TRIEDY a1.
 VEREJNÁ SEKCIA.
 ÚDAJE: num1 TYP a HODNOTA 100.
 METÓDY:m1.
 KONCOVÝ TRIEDA.
 REALIZÁCIA TRIEDY a1.
 METÓDA m1.
 PÍŠTE: 'a1:',číslo1.
 ENDMETHOD.
 KONCOVÝ TRIEDA.
 TRIEDA b1 DEFINÍCIA DEDENÁ Z a1.
 VEREJNÁ SEKCIA.
 METÓDY:m2, m1 REdefinícia.
 KONCOVÝ TRIEDA.
 REALIZÁCIA TRIEDY b1.
 METÓDA m1.
 číslo1 = číslo1.
 PÍŠTE: 'b1:',číslo1.
 ENDMETHOD.
 METÓDA m2.
 PÍŠTE: 'M2 v triede b1'.
 ENDMETHOD.
 KONCOVÝ TRIEDA.
 ZAČIATOK VÝBERU.
 ÚDAJE: a TYP ODKAZ NA a1.
 ÚDAJE: b TYP ODKAZ NA b1.
 *údaje: c typ REF TO c1.
 ******************************************************* ************** VYTVORIŤ OBJEKT b.
 a = b.  "upcasting METÓDA VOLANIA a->m1( ).
 *volajte SPÔSOB a->m2( ).  "Nemôžeme získať prístup k vlastným metódam podtriedy pomocou supertriedy ref.
 NOVÝ RIADOK.
 b ?= a.  " down casting METÓDA VOLANIA b->m1( ).
 NOVÝ RIADOK.
 METÓDA VOLANIA b->m2( ).
 ******************************************************* *************** " chyba null ref vytvoriť OBJECT a.
 b ?= a.  "down casting stále dáva volanie výpisu METÓDA b->m1( ).
 ******************************************************* *************** VYTVORIŤ OBJEKT a.
 VYSKÚŠAJTE.
 b ?= a.  "pokúsili ste sa použiť 'NULL' objektový referenčný výpis CATCH cx_sy_move_cast_error.
 METÓDA VOLANIA b->m1( ).
 KONIEC.
 ******************************************************* *************** VYTVORIŤ OBJEKT a.
 VYTVORIŤ OBJEKT b.
 VYSKÚŠAJTE.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 METÓDA VOLANIA b->m1( ).
 volať METÓDA b->m2( ).
 KONIEC.
 CLASS lcl_shape DEFINÍCIA.
 VEREJNÁ SEKCIA.
 METÓDY žrebovať.
 KONCOVÝ TRIEDA.
 TRIEDA lcl_circle DEFINÍCIA ODDIELANÁ Z lcl_shape.
 VEREJNÁ SEKCIA.
 METÓDY: nakreslite REDEFINÍCIU, calc_area.
 KONCOVÝ TRIEDA.
 IMPLEMENTÁCIA CLASS lcl_shape.
 METÓDA žrebovanie.
 WRITE :/ 'Kreslenie ľubovoľného tvaru'.
 ENDMETHOD.
 KONCOVÝ TRIEDA.
 IMPLEMENTÁCIA CLASS lcl_circle.
 METÓDA žrebovanie.
 WRITE :/ 'Nakresli konkrétny tvar: Kruh'.
 ENDMETHOD.
 METÓDA calc_area.
 PÍŠTE :/ 'Oblasť Crcle = 2iiR'.
 ENDMETHOD.
 KONCOVÝ TRIEDA.
 ZAČIATOK VÝBERU.
 ÚDAJE: o_cir TYP REF TO lcl_circle.
 VYTVORIŤ OBJEKT o_cir.
 METÓDA VOLANIA o_cir->draw( ).  " volá metódu podtriedy Draw() CALL METHOD o_cir->calc_area().
 ULINE.
 "--------- Narrow cast (Upcast)----------------" ÚDAJE : o_shp TYP ODKAZ NA lcl_shape.
 o_shp = o_cir.  " Narrow cast(Upcast) METÓDA VOLANIA o_shp->draw( ).  "volá metódu podtriedy Draw() "volá METÓDA o_shp->calc_area() .  " chyba kompilácie ULINE.
 "---------- Rozširujúce sa obsadenie (stiahnutie) -----------" ÚDAJE : o_cir1 TYP ODKAZ NA lcl_circle.
 " o_cir1 = o_shp.  " chyba kompilácie o_cir1 ?= o_shp.  " Rozširujúce sa obsadenie (stiahnutie) METÓDA VOLANIA o_cir1->draw( ).  " volá metódu podtriedy Draw() CALL METHOD o_cir1->calc_area().
 DEFINÍCIA TRIEDY a1.
 VEREJNÁ SEKCIA.
 ÚDAJE: num1 TYP a HODNOTA 100.
 METÓDY:m1.
 KONCOVÝ TRIEDA.
 REALIZÁCIA TRIEDY a1.
 METÓDA m1.
 PÍŠTE: 'a1:',číslo1.
 ENDMETHOD.
 KONCOVÝ TRIEDA.
 TRIEDA b1 DEFINÍCIA DEDENÁ Z a1.
 VEREJNÁ SEKCIA.
 METÓDY:m2, m1 REdefinícia.
 KONCOVÝ TRIEDA.
 REALIZÁCIA TRIEDY b1.
 METÓDA m1.
 číslo1 = číslo1.
 PÍŠTE: 'b1:',číslo1.
 ENDMETHOD.
 METÓDA m2.
 PÍŠTE: 'M2 v triede b1'.
 ENDMETHOD.
 KONCOVÝ TRIEDA.
 ZAČIATOK VÝBERU.
 ÚDAJE: rodič TYP REF TO a1.
 ÚDAJE: dieťa TYP ODKAZ NA b1.
 *údaje: c typ REF TO c1.
 ******************************************************* ************** VYTVORIŤ OBJEKT dieťa.
 rodič = dieťa.  "upcasting METÓDA VOLANIA parent->m1( ).
 SPÔSOB VOLANIA dieťa->m1( ).
 SPÔSOB VOLANIA dieťa->m2( ).
 *volajte SPÔSOB a->m2( ).  "Nemôžeme získať prístup k vlastným metódam podtriedy pomocou supertriedy ref.
 NOVÝ RIADOK.
 dieťa ?= rodič.  " down casting SPÔSOB VOLANIA dieťa->m1( ).
 NOVÝ RIADOK.
 SPÔSOB VOLANIA dieťa->m2( ).
 ******************************************************* **************** *" chyba null ref *vytvoriť OBJECT a.
 *b ?= a.  "down casting stále dáva výpis *call METÓDA b->m1( ).
 ******************************************************* **************** * VYTVORIŤ OBJEKT a.
 VYSKÚŠAJTE.
 b ?= a.  "pokúsili ste sa použiť 'NULL' objektový referenčný výpis CATCH cx_sy_move_cast_error.
 METÓDA VOLANIA b->m1( ).
 KONIEC.
 ******************************************************* **************** * VYTVORIŤ OBJEKT a.
 VYTVORIŤ OBJEKT b.
 VYSKÚŠAJTE.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 METÓDA VOLANIA b->m1( ).
 volať METÓDA b->m2( ).
 KONIEC.
 ******** Jedinečné hodnoty****************** ÚDAJE: lv_string TYPE reťazec, lv_string2 TYPE reťazec, lv_string_final TYPE reťazec.
 TYPY: ZAČIATOK ty_data, overenie TYPU c, KONIEC ty_data.
 DATA: ls_user TYPE ty_data, ls_user2 TYPE ty_data, lt_user2 TYP TABLE OF ty_data, lt_user TYP TABLE OF ty_data.
 lv_string = 'a,b,c,a'.
 lv_string2 = 'd,b,c,a'.
 ROZDELTE lv_string NA ',' DO TABUĽKY lt_user.
 ROZDELTE lv_string2 NA ',' DO TABUĽKY lt_user2.
 LOOP AT lt_user2 ASSIGNING FIELD-SYMBOL( ).
 VLOŽIŤ INTO TABLE lt_user.
 ENDLOOP.
 SORT lt_user BY auth.
 ODSTRÁNIŤ PRIDAJNÉ DUPLIKÁTY Z lt_user POROVNAJÚCE auth.
 AK sy-subrc = 0.
 LOOP AT lt_user ASSIGNING FIELD-SYMBOL( ).
 AK JE lv_string_final POČIATOČNÉ.
 lv_string_final = -autorizácia
 ELSE.
 CONCATENATE lv_string_final -auth DO lv_string_final ODDELENÉ ','.
 KONIEC AK.
 ENDLOOP.
 KONIEC AK.

 

Zanechať komentár

Táto stránka používa Akismet na zníženie spamu. Zistite, ako sa spracúvajú údaje vašich komentárov.