Casting az ABAP programban

a1 OSZTÁLY DEFINÍCIÓ.
 NYILVÁNOS RÉSZ.
 ADATOK: num1 TÍPUS i ÉRTÉK 100.
 MÓDSZEREK:m1.
 ENDCLASS.
 a1 OSZTÁLY MEGVALÓSÍTÁS.
 MÓDSZER m1.
 ÍRJA BE: 'a1:',num1.
 VÉGMÓDSZER.
 ENDCLASS.
 b1 OSZTÁLY DEFINÍCIÓ ÖRÖKÜLÉS A1-TŐL.
 NYILVÁNOS RÉSZ.
 MÓDSZEREK:m2, m1 ÚJRADEFINÍCIÓ.
 ENDCLASS.
 b1 OSZTÁLY MEGVALÓSÍTÁS.
 MÓDSZER m1.
 szám1 = szám1.
 ÍRJA BE: 'b1:',szám1.
 VÉGMÓDSZER.
 MÓDSZER m2.
 ÍRJA BE: „M2 a b1 osztályban”.
 VÉGMÓDSZER.
 ENDCLASS.
 A KIVÁLASZTÁS KEZDETE.
 ADATOK: a TÍPUS HIVATKOZÁS A1.
 ADATOK: b TÍPUS REF. A b1.
 *adatok: c típusú REF TO c1.
 ****************************************************** ************** OBJEKTUM LÉTREHOZÁSA b.
 a = b.  "upcasting CALL METHOD a->m1( ).
 *hívja a MÓDSZERt a->m2( ).  " nem férhetünk hozzá a saját alosztály metódusaihoz a ref szuper osztály használatával.
 ÚJ SOR.
 b ?= a.  " downcasting CALL MÓDSZER b->m1( ).
 ÚJ SOR.
 HÍVÁSI MÓDSZER b->m2( ).
 ****************************************************** *************** " hiba null ref OBJECT létrehozása a.
 b ?= a.  "A leöntés továbbra is a kiíratást adó MÓDSZER b->m1( ).
 ****************************************************** *************** OBJEKTUM LÉTREHOZÁSA a.
 PRÓBÁLJA MEG.
 b ?= a.  "NULL objektumhivatkozási kiíratást próbált használni CATCH cx_sy_move_cast_error.
 HÍVÁSI MÓDSZER b->m1( ).
 ENDTRY.
 ****************************************************** *************** OBJEKTUM LÉTREHOZÁSA a.
 OBJEKTUM LÉTREHOZÁSA b.
 PRÓBÁLJA MEG.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 HÍVÁSI MÓDSZER b->m1( ).
 hívja meg a b->m2( ) MÓDSZERT.
 ENDTRY.
 OSZTÁLY lcl_shape DEFINÍCIÓ.
 NYILVÁNOS RÉSZ.
 MÓDSZEREK sorsolás.
 ENDCLASS.
 OSZTÁLY lcl_circle DEFINÍCIÓ ÖRÖKÜLÉS lcl_shape-ból.
 NYILVÁNOS RÉSZ.
 MÓDSZEREK: rajzoljon REEFINITION, calc_area.
 ENDCLASS.
 OSZTÁLY lcl_shape MEGVALÓSÍTÁS.
 MÓDSZER rajzolni.
 WRITE :/ 'Bármilyen alakzat rajzolása'.
 VÉGMÓDSZER.
 ENDCLASS.
 OSZTÁLY lcl_circle MEGVALÓSÍTÁS.
 MÓDSZER rajzolni.
 WRITE :/ 'Konkrét alakzat rajzolása: Kör'.
 VÉGMÓDSZER.
 MÓDSZER számítási_terület.
 WRITE :/ 'Krcle területe = 2iiR'.
 VÉGMÓDSZER.
 ENDCLASS.
 A KIVÁLASZTÁS KEZDETE.
 ADATOK: o_cir TYPE REF TO lcl_circle.
 OBJEKTUM LÉTREHOZÁSA o_cir.
 HÍVÁS MÓDSZER o_cir->draw( ).  " meghívja a Draw() alosztályt a CALL METHOD o_cir->calc_area( ) metódus.
 ULINE.
 "--------- Keskeny cast (Upcast)----------------" ADATOK : o_shp TÍPUS REF TO lcl_shape.
 o_shp = o_cir.  " Narrow cast(Upcast) CALL MÓDSZER o_shp->draw( ).  " meghívja a Draw() metódus alosztályát, a METHOD o_shp->calc_area( ) .  " fordítási hiba ULINE.
 "---------- Szélesítése Cast(Downcast) -----------" ADATOK : o_cir1 TÍPUS REF TO lcl_circle.
 " o_cir1 = o_shp.  " fordítási hiba o_cir1 ?= o_shp.  " Szélesítés Cast(Downcast) CALL MÓDSZER o_cir1->draw( ).  " meghívja a Draw() alosztályt: CALL METHOD o_cir1->calc_area( ).
 a1 OSZTÁLY DEFINÍCIÓ.
 NYILVÁNOS RÉSZ.
 ADATOK: num1 TÍPUS i ÉRTÉK 100.
 MÓDSZEREK:m1.
 ENDCLASS.
 a1 OSZTÁLY MEGVALÓSÍTÁS.
 MÓDSZER m1.
 ÍRJA BE: 'a1:',num1.
 VÉGMÓDSZER.
 ENDCLASS.
 b1 OSZTÁLY DEFINÍCIÓ ÖRÖKÜLÉS A1-TŐL.
 NYILVÁNOS RÉSZ.
 MÓDSZEREK:m2, m1 ÚJRADEFINÍCIÓ.
 ENDCLASS.
 b1 OSZTÁLY MEGVALÓSÍTÁS.
 MÓDSZER m1.
 szám1 = szám1.
 ÍRJA BE: 'b1:',szám1.
 VÉGMÓDSZER.
 MÓDSZER m2.
 ÍRJA BE: „M2 a b1 osztályban”.
 VÉGMÓDSZER.
 ENDCLASS.
 A KIVÁLASZTÁS KEZDETE.
 ADATOK: szülő TÍPUS REF TO a1.
 ADATOK: gyermek TÍPUS REF TO b1.
 *adatok: c típusú REF TO c1.
 ****************************************************** ************** TÁRGY LÉTREHOZÁSA gyermek.
 szülő = gyerek.  "upcasting CALL METHOD szülő->m1( ).
 HÍVÁSI MÓDSZER gyermek->m1( ).
 HÍVÁSI MÓDSZER gyermek->m2( ).
 *hívja a MÓDSZERt a->m2( ).  " nem férhetünk hozzá a saját alosztály metódusaihoz a ref szuper osztály használatával.
 ÚJ SOR.
 gyerek ?= szülő.  " downcasting CALL MÓDSZER gyermek->m1( ).
 ÚJ SOR.
 HÍVÁSI MÓDSZER gyermek->m2( ).
 ****************************************************** **************** *" hiba null ref *OBJECT létrehozása a.
 *b ?= a.  "A leöntés továbbra is az adó dump *hívása b->m1( ) MÓDSZER.
 ****************************************************** *************** * OBJEKTUM LÉTREHOZÁSA a.
 PRÓBÁLJA MEG.
 b ?= a.  "NULL objektumhivatkozási kiíratást próbált használni CATCH cx_sy_move_cast_error.
 HÍVÁSI MÓDSZER b->m1( ).
 ENDTRY.
 ****************************************************** *************** * OBJEKTUM LÉTREHOZÁSA a.
 OBJEKTUM LÉTREHOZÁSA b.
 PRÓBÁLJA MEG.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 HÍVÁSI MÓDSZER b->m1( ).
 hívja meg a b->m2( ) MÓDSZERT.
 ENDTRY.
 ******* Egyedi értékek******************* ADATOK: lv_string TYPE karakterlánc, lv_string2 TYPE karakterlánc, lv_string_final TYPE karakterlánc.
 TÍPUSOK: BEGIN OF ty_data, auth TYPE c, END OF ty_data.
 ADATOK: 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 ',' TÁBLÁZATBA lt_user.
 OSZTOTT EL lv_string2 AT ',' TÁBLÁZATBA lt_user2.
 LOOP AT lt_user2 MEZŐSZIMBOL ( ).
 BESZÁLLÍTÁS TÁBLÁZATBA lt_user.
 ENDLOOP.
 RENDEZÉS lt_user hitelesítés szerint.
 SZOMSZÁMOS DUPLIKÁTUMOK TÖRLÉSE A LT_USER-BŐL ÖSSZEHASONLÍTJA auth.
 HA sy-subrc = 0.
 LOOP AT lt_user ASSIGNING FIELD-SYMBOL( ).
 HA az lv_string_final INITIAL.
 lv_string_final = -aut.
 MÁS.
 CONCATENATE lv_string_final -auth INTO lv_string_final ELVÁLASZTVA ','.
 ENDIF.
 ENDLOOP.
 ENDIF.

 

Véleménye fontos számunkra!

Ez az oldal Akismet-et használ a levélszemét csökkentése érdekében. Ismerje meg, hogyan dolgozik a megjegyzésed.