Casting u ABAP programu

DEFINICIJA KLASE a1.
 JAVNI ODJEL.
 PODACI: br.1 TIP i VRIJEDNOST 100.
 METODE:m1.
 ZAVRŠNA RAZREDA.
 IMPLEMENTACIJA KLASE a1.
 METODA m1.
 NAPIŠITE: 'a1:',broj1.
 KRAJ METODA.
 ZAVRŠNA RAZREDA.
 DEFINICIJA KLASE b1 NASLJEĐIVANJE OD a1.
 JAVNI ODJEL.
 METODE:m2, m1 REDEFINICIJA.
 ZAVRŠNA RAZREDA.
 IMPLEMENTACIJA KLASE b1.
 METODA m1.
 broj1 = broj1.
 NAPIŠITE: 'b1:',broj1.
 KRAJ METODA.
 METODA m2.
 NAPIŠITE: 'M2 u klasi b1'.
 KRAJ METODA.
 ZAVRŠNA RAZREDA.
 POČETAK IZBORA.
 PODACI: a VRSTA SE NA a1.
 PODACI: b TIP REF TO b1.
 *podaci: c tip REF TO c1.
 ************************************************** ************* STVORI OBJEKAT b.
 a = b.  "upcasting CALL METODA a->m1( ).
 *pozovi METODU a->m2( ).  " ne možemo pristupiti vlastitim metodama podklase koristeći ref.
 NOVA LINIJA.
 b ?= a.  " lijevanje prema dolje METODA POZIVA b->m1( ).
 NOVA LINIJA.
 POZIVNA METODA b->m2( ).
 ************************************************** *************** " error null ref create OBJECT a.
 b ?= a.  "lijevanje prema dolje i dalje njegov poziv za ispuštanje podataka METODA b->m1( ).
 ************************************************** *************** CREATE OBJEKT a.
 PROBATI.
 b ?= a.  "Pokušao si koristiti 'NULL' ispis reference objekta CATCH cx_sy_move_cast_error.
 POZIVNA METODA b->m1( ).
 KRAJ.
 ************************************************** *************** CREATE OBJEKT a.
 STVORI OBJEKAT b.
 PROBATI.
 b ?= a.
 HVATI cx_sy_move_cast_error.
 POZIVNA METODA b->m1( ).
 pozvati METODU b->m2( ).
 KRAJ.
 CLASS lcl_shape DEFINICIJA.
 JAVNI ODJEL.
 METODE crtanje.
 ZAVRŠNA RAZREDA.
 KLASA lcl_circle DEFINICIJA NASLJEĐUJE SE OD lcl_shape.
 JAVNI ODJEL.
 METODE: nacrtati REDEFINICIJA, calc_area.
 ZAVRŠNA RAZREDA.
 CLASS lcl_shape IMPLEMENTACIJA.
 METODA izvlačenje.
 WRITE :/ 'Crtanje bilo kojeg oblika'.
 KRAJ METODA.
 ZAVRŠNA RAZREDA.
 CLASS lcl_circle IMPLEMENTACIJA.
 METODA izvlačenje.
 WRITE :/ 'Specifičan oblik za crtež: Krug'.
 KRAJ METODA.
 METODA calc_area.
 NAPIŠITE :/ 'Oblast Crcle = 2iiR'.
 KRAJ METODA.
 ZAVRŠNA RAZREDA.
 POČETAK IZBORA.
 PODACI: o_cir VRSTA REF TO lcl_circle.
 STVORI OBJEKAT o_cir.
 METODA POZIVA o_cir->draw( ).  " poziva metodu podklase Draw() POZIV METODA o_cir->calc_area().
 ULINE.
 "--------- Uski cast (Upcast)--------------" PODACI: o_shp TYPE REF TO lcl_shape.
 o_shp = o_cir.  " Usko cast (Upcast) METODA POZIVA o_shp->draw( ).  " poziva metodu podklase Draw() "pozovi METODU o_shp->calc_area() .  " pogreška kompilacije ULINE.
 "--------- Širenje Cast(Downcast) -----------" PODACI: o_cir1 TYPE REF TO lcl_circle.
 " o_cir1 = o_shp.  " pogreš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 ODJEL.
 PODACI: br.1 TIP i VRIJEDNOST 100.
 METODE:m1.
 ZAVRŠNA RAZREDA.
 IMPLEMENTACIJA KLASE a1.
 METODA m1.
 NAPIŠITE: 'a1:',broj1.
 KRAJ METODA.
 ZAVRŠNA RAZREDA.
 DEFINICIJA KLASE b1 NASLJEĐIVANJE OD a1.
 JAVNI ODJEL.
 METODE:m2, m1 REDEFINICIJA.
 ZAVRŠNA RAZREDA.
 IMPLEMENTACIJA KLASE b1.
 METODA m1.
 broj1 = broj1.
 NAPIŠITE: 'b1:',broj1.
 KRAJ METODA.
 METODA m2.
 NAPIŠITE: 'M2 u klasi b1'.
 KRAJ METODA.
 ZAVRŠNA RAZREDA.
 POČETAK IZBORA.
 PODACI: roditelj TIP REF TO a1.
 PODACI: dijete TIP REF TO b1.
 *podaci: c tip REF TO c1.
 ************************************************** ************* CREATE OBJEKT dijete.
 roditelj = dijete.  "upcasting CALL METODA roditelj->m1( ).
 METODA POZIVA dijete->m1( ).
 METODA POZIVA dijete->m2( ).
 *pozovi METODU a->m2( ).  " ne možemo pristupiti vlastitim metodama podklase koristeći ref.
 NOVA LINIJA.
 dijete ?= roditelj.  " lijevanje prema dolje METODA POZIVA dijete->m1( ).
 NOVA LINIJA.
 METODA POZIVA dijete->m2( ).
 ************************************************** **************** *" pogreška null ref *kreiraj OBJEKT a.
 *b ?= a.  "lijevanje prema dolje još uvijek daje ispis *pozovi METODU b->m1( ).
 ************************************************** **************** * CREATE OBJEKT a.
 PROBATI.
 b ?= a.  "Pokušao si koristiti 'NULL' ispis reference objekta CATCH cx_sy_move_cast_error.
 POZIVNA METODA b->m1( ).
 KRAJ.
 ************************************************** **************** * CREATE OBJEKT a.
 STVORI OBJEKAT b.
 PROBATI.
 b ?= a.
 HVATI cx_sy_move_cast_error.
 POZIVNA METODA b->m1( ).
 pozvati METODU b->m2( ).
 KRAJ.
 ******** Jedinstvene vrijednosti******************* PODACI: lv_string TYPE string, lv_string2 TYPE string, lv_string_final TYPE string.
 VRSTE: BEGIN OF ty_data, auth TYPE c, END OF ty_data.
 PODACI: ls_user TYPE ty_data, ls_user2 TYPE ty_data, lt_user2 TYPE TABLICA ty_data, lt_user TYPE TABLICA ty_data.
 lv_string = 'a,b,c,a'.
 lv_string2 = 'd,b,c,a'.
 PODJELI lv_string NA ',' U TABLICU lt_user.
 PODJELI lv_string2 NA ',' U TABLICU lt_user2.
 PETLJA NA lt_user2 DODJELU POLJA-SIMBOL( ).
 UMETNUTI INTO TABLE lt_user.
 ZAVRŠNA PETLJA.
 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.
 DRUGO.
 UKLJUČI lv_string_final -auth INTO lv_string_final ODVOJENO ','.
 ZAVRŠI AKO.
 ZAVRŠNA PETLJA.
 ZAVRŠI AKO.

 

Ostavite komentar

Ova web stranica koristi Akismet za smanjenje neželjene pošte. Saznajte kako se podaci vašeg komentara obrađuju.