Casting u ABAP programu

DEFINICIJA KLASE a1.
 JAVNI SEKCIJA.
 PODACI: br.1 TIP i VRIJEDNOST 100.
 METODE:m1.
 ENDCLASS.
 IMPLEMENTACIJA KLASE a1.
 METODA m1.
 WRITE: 'a1:',broj1.
 ENDMETHOD.
 ENDCLASS.
 DEFINICIJA KLASE b1 NASLJEĐUJE SE OD a1.
 JAVNI SEKCIJA.
 METODE: m2, m1 REDEFINICIJA.
 ENDCLASS.
 IMPLEMENTACIJA KLASE b1.
 METODA m1.
 broj1 = broj1.
 WRITE: 'b1:',broj1.
 ENDMETHOD.
 METODA m2.
 NAPIŠITE: 'M2 u klasi b1'.
 ENDMETHOD.
 ENDCLASS.
 POČETAK IZBORA.
 PODACI: a TIP REF TO a1.
 PODACI: b TIP REF TO b1.
 *podaci: c tip REF TO c1.
 ******************************************************* ************* CREATE OBJEKT b.
 a = b.  "upcasting CALL METODA a->m1( ).
 *pozovite METODU a->m2( ).  " ne možemo pristupiti vlastitim metodama podklase koristeći ref.
 NEW-LINE.
 b ?= a.  " bacanje prema dolje METODA POZIVA b->m1( ).
 NEW-LINE.
 METODA POZIVA b->m2( ).
 ******************************************************* *************** " error null ref create OBJECT a.
 b ?= a.  "prebacivanje nadole i dalje njegovo davanje dump poziva METODA b->m1( ).
 ************************************************** *************** CREATE OBJEKT a.
 POKUŠAJTE.
 b ?= a.  "Pokušao si koristiti 'NULL' dump reference objekta CATCH cx_sy_move_cast_error.
 METODA POZIVA b->m1( ).
 ENDTRY.
 ************************************************** *************** CREATE OBJEKT a.
 CREATE OBJEKAT b.
 POKUŠAJTE.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 METODA POZIVA b->m1( ).
 pozovite METODU b->m2( ).
 ENDTRY.
 CLASS lcl_shape DEFINICIJA.
 JAVNI SEKCIJA.
 METODE crtanje.
 ENDCLASS.
 KLASA lcl_circle DEFINICIJA NASLJEĐENA OD lcl_shape.
 JAVNI SEKCIJA.
 METODE: crtanje REDEFINICIJE, calc_area.
 ENDCLASS.
 CLASS lcl_shape IMPLEMENTACIJA.
 METODA izvlačenje.
 WRITE :/ 'Crtanje bilo kojeg oblika'.
 ENDMETHOD.
 ENDCLASS.
 CLASS lcl_circle IMPLEMENTACIJA.
 METODA izvlačenje.
 WRITE :/ 'Specifičan oblik za crtež: Krug'.
 ENDMETHOD.
 METHOD calc_area.
 WRITE :/ 'Oblast Crcle = 2iiR'.
 ENDMETHOD.
 ENDCLASS.
 POČETAK IZBORA.
 PODACI: o_cir TIP REF TO lcl_circle.
 CREATE OBJEKAT o_cir.
 METODA POZIVA o_cir->draw().  " poziva metodu podklase Draw() METODA POZIVA o_cir->calc_area().
 ULINE.
 "-------- Uski cast (Upcast)--------------" PODACI : o_shp TYPE REF TO lcl_shape.
 o_shp = o_cir.  " Usko prebacivanje (Upcast) METODA POZIVA o_shp->draw( ).  " poziva metodu podklase Draw() "pozovi METHOD o_shp->calc_area() .  " greška u kompilaciji ULINE.
 "--------- Širenje Cast(Downcast) -----------" PODACI : o_cir1 TYPE REF TO lcl_circle.
 " o_cir1 = o_shp.  " greška kompilacije o_cir1 ?= o_shp.  " Proširivanje Cast (Downcast) METODA POZIVA o_cir1->draw( ).  " poziva metodu podklase Draw() METODA POZIVA o_cir1->calc_area().
 DEFINICIJA KLASE a1.
 JAVNI SEKCIJA.
 PODACI: br.1 TIP i VRIJEDNOST 100.
 METODE:m1.
 ENDCLASS.
 IMPLEMENTACIJA KLASE a1.
 METODA m1.
 WRITE: 'a1:',broj1.
 ENDMETHOD.
 ENDCLASS.
 DEFINICIJA KLASE b1 NASLJEĐUJE SE OD a1.
 JAVNI SEKCIJA.
 METODE: m2, m1 REDEFINICIJA.
 ENDCLASS.
 IMPLEMENTACIJA KLASE b1.
 METODA m1.
 broj1 = broj1.
 WRITE: 'b1:',broj1.
 ENDMETHOD.
 METODA m2.
 NAPIŠITE: 'M2 u klasi b1'.
 ENDMETHOD.
 ENDCLASS.
 POČETAK IZBORA.
 PODACI: roditelj TIP REF TO a1.
 PODACI: dijete TIP REF TO b1.
 *podaci: c tip REF TO c1.
 ******************************************************* ************* CREATE OBJECT dijete.
 roditelj = dijete.  "upcasting CALL METODA roditelj->m1( ).
 METODA POZIVA dijete->m1( ).
 METODA POZIVA dijete->m2( ).
 *pozovite METODU a->m2( ).  " ne možemo pristupiti vlastitim metodama podklase koristeći ref.
 NEW-LINE.
 dijete ?= roditelj.  " bacanje prema dolje METODA POZIVA dijete->m1( ).
 NEW-LINE.
 METODA POZIVA dijete->m2( ).
 ******************************************************* **************** *" error null ref *create OBJECT a.
 *b ?= a.  "dolje bacanje i dalje daje dump *pozovi METODU b->m1( ).
 ******************************************************* **************** * CREATE OBJEKT a.
 POKUŠAJTE.
 b ?= a.  "Pokušao si koristiti 'NULL' dump reference objekta CATCH cx_sy_move_cast_error.
 METODA POZIVA b->m1( ).
 ENDTRY.
 ******************************************************* **************** * CREATE OBJEKT a.
 CREATE OBJEKAT b.
 POKUŠAJTE.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 METODA POZIVA b->m1( ).
 pozovite METODU b->m2( ).
 ENDTRY.
 ******** Jedinstvene vrijednosti******************* PODACI: lv_string TYPE string, lv_string2 TYPE string, lv_string_final TYPE string.
 TIPOVI: POČETAK TY_podataka, auth TIP c, KRAJ ty_podataka.
 PODACI: ls_user TYPE ty_data, ls_user2 TYPE ty_data, lt_user2 TIP TABELA ty_data, lt_user TYPE TABELA ty_data.
 lv_string = 'a,b,c,a'.
 lv_string2 = 'd,b,c,a'.
 PODJELI lv_string NA ',' U TABLU lt_user.
 PODJELI lv_string2 NA ',' U TABELU lt_user2.
 PETLJA NA lt_user2 DODJELU POLJA-SIMBOL( ).
 INSERT INTO TABLE lt_user.
 ENDLOOP.
 SORT lt_user PO aut.
 IZBRIŠI SUSJEDNE DUPLIKATE IZ lt_user COMPARING auth.
 AKO sy-subrc = 0.
 PETLJA NA lt_korisniku DODJELU POLJA-SIMBOL( ).
 AKO JE lv_string_final INITIAL.
 lv_string_final = -auth.
 ELSE.
 CONCATENATE lv_string_final -auth INTO lv_string_final ODVOJENO ','.
 ENDIF.
 ENDLOOP.
 ENDIF.

 

Ostavite komentar

Ova stranica koristi Akismet kako bi smanjila neželjenu poštu. Saznajte kako se podaci vašeg komentara obrađuju.