Esipuhe – Tämä postaus on osa ABAP-ohjelmat sarja.
LUOKAN a1 MÄÄRITELMÄ. JULKINEN OSIO. TIEDOT: num1 TYYPPI i ARVO 100. MENETELMÄT:m1. LOPPUSUOJA. LUOKAN a1 TOTEUTUS. MENETELMÄ m1. KIRJOITTAA: 'a1:',num1. LOPETUSMENETELMÄ. LOPPUSUOJA. LUOKAN b1 MÄÄRITELMÄ PERINTYY a1:lta. JULKINEN OSIO. MENETELMÄT:m2, m1 UUDELLEENMÄÄRITELMÄ. LOPPUSUOJA. LUOKAN b1 TOTEUTUS. MENETELMÄ m1. numero1 = numero1. KIRJOITA: 'b1:', numero1. LOPETUSMENETELMÄ. MENETELMÄ m2. KIRJOITA: "M2 luokassa b1". LOPETUSMENETELMÄ. LOPPUSUOJA. VALINTA ALKU. TIEDOT: a TYYPPI VIITE a1. TIEDOT: b TYYPPI VIITE b1. *tiedot: c tyyppi VIITE c1. ***************************************************** ************** LUO OBJEKTI b. a = b. "upcasting CALL METHOD a->m1( ). *soita METHOD a->m2( ). " emme voi käyttää omia alaluokkamenetelmiä käyttämällä superluokan ref. UUSI RIVI. b ?= a. " alaspäin casting CALL METHOD b->m1( ). UUSI RIVI. KUITTAUSMENETELMÄ b->m2( ). ***************************************************** *************** " virhe null ref luo OBJEKTI a. b ?= a. "downcasting edelleen sen antava dump-kutsu METHOD b->m1( ). ***************************************************** ************** LUO OBJEKTI a. YRITTÄÄ. b ?= a. "yritit käyttää 'NULL'-objektiviittausvedoskirjaa CATCH cx_sy_move_cast_error. KUITTAUSMENETELMÄ b->m1( ). ENDTRY. ***************************************************** ************** LUO OBJEKTI a. LUO OBJEKTI b. YRITTÄÄ. b ?= a. CATCH cx_sy_move_cast_error. KUITTAUSMENETELMÄ b->m1( ). kutsu METHOD b->m2( ). ENDTRY. LUOKAN lcl_shape MÄÄRITELMÄ. JULKINEN OSIO. METODIT piirtää. LOPPUSUOJA. LUOKKA lcl_circle MÄÄRITELMÄ PERITÄÄN lcl_muodosta. JULKINEN OSIO. MENETELMÄT: piirrä REDEFINITION, calc_area. LOPPUSUOJA. LUOKAN lcl_shape TOTEUTUS. MENETELMÄ piirtää. KIRJOITTAA :/ 'Mikä tahansa muodon piirtäminen'. LOPETUSMENETELMÄ. LOPPUSUOJA. LUOKAN lcl_circle TOTEUTUS. MENETELMÄ piirtää. WRITE :/ 'Tietyneen muodon piirtäminen: Ympyrä'. LOPETUSMENETELMÄ. MENETELMÄ laskenta-ala. KIRJOITTAA :/ 'Krclen alue = 2iiR'. LOPETUSMENETELMÄ. LOPPUSUOJA. VALINTA ALKU. TIEDOT: o_cir TYYPPI REF lcl_circle. LUO OBJEKTI o_cir. CALL METHOD o_cir->draw( ). " kutsuu alaluokkaa Draw() -menetelmää CALL METHOD o_cir->calc_area( ). ULINE. "--------- Kapea cast (Upcast)----------------" TIEDOT : o_shp TYYPPI VIITE lcl_shape. o_shp = o_cir. " Kapea cast(Upcast) CALL METHOD o_shp->draw( ). " kutsuu alaluokkaa Draw() -menetelmää "kutsua METHOD o_shp->calc_area( ) . " käännösvirhe ULINE. "---------- Laajenna Cast(Downcast) -----------" TIEDOT : o_cir1 TYYPPI VIITE lcl_circle. " o_cir1 = o_shp. " täydennysvirhe o_cir1 ?= o_shp. " Laajenna Cast(Downcast) CALL METHOD o_cir1->draw( ). " kutsuu alaluokkaa Draw() -metodia CALL METHOD o_cir1->calc_area( ). LUOKAN a1 MÄÄRITELMÄ. JULKINEN OSIO. TIEDOT: num1 TYYPPI i ARVO 100. MENETELMÄT:m1. LOPPUSUOJA. LUOKAN a1 TOTEUTUS. MENETELMÄ m1. KIRJOITTAA: 'a1:',num1. LOPETUSMENETELMÄ. LOPPUSUOJA. LUOKAN b1 MÄÄRITELMÄ PERINTYY a1:lta. JULKINEN OSIO. MENETELMÄT:m2, m1 UUDELLEENMÄÄRITELMÄ. LOPPUSUOJA. LUOKAN b1 TOTEUTUS. MENETELMÄ m1. numero1 = numero1. KIRJOITA: 'b1:', numero1. LOPETUSMENETELMÄ. MENETELMÄ m2. KIRJOITA: "M2 luokassa b1". LOPETUSMENETELMÄ. LOPPUSUOJA. VALINTA ALKU. TIEDOT: vanhempi TYYPPI VIITE a1. TIEDOT: lapsi TYYPPI VIITE b1. *tiedot: c tyyppi VIITE c1. ***************************************************** ************** LUO OBJEKTI-lapsi. vanhempi = lapsi. "upcasting CALL METHOD parent->m1( ). SOITTAUSTAPA lapsi->m1( ). SOITTAUSTAPA lapsi->m2( ). *soita METHOD a->m2( ). " emme voi käyttää omia alaluokkamenetelmiä käyttämällä superluokan ref. UUSI RIVI. lapsi? = vanhempi. " alas heitto PUHELUTAPA lapsi->m1( ). UUSI RIVI. SOITTAUSTAPA lapsi->m2( ). ***************************************************** **************** *" virhe null ref *luo OBJEKTI a. *b ?= a. "alasvalu edelleen sen antamisen kaatopaikka *soita METHOD b->m1( ). ***************************************************** *************** * LUO OBJEKTI a. YRITTÄÄ. b ?= a. "yritit käyttää 'NULL'-objektiviittausvedoskirjaa CATCH cx_sy_move_cast_error. KUITTAUSMENETELMÄ b->m1( ). ENDTRY. ***************************************************** *************** * LUO OBJEKTI a. LUO OBJEKTI b. YRITTÄÄ. b ?= a. CATCH cx_sy_move_cast_error. KUITTAUSMENETELMÄ b->m1( ). kutsu METHOD b->m2( ). ENDTRY. ******* Yksilölliset arvot******************* DATA: lv_string TYPE-merkkijono, lv_string2 TYPE-merkkijono, lv_string_final TYPE-merkkijono. TYYPIT: TY_data BEGIN OF TYPE c, todennus TYPE c, END OF ty_data. TIEDOT: ls_user TYPE ty_data, ls_user2 TYPE ty_data, lt_user2 TYPE TY_TABLE OF ty_data, lt_user TYYPPI ty_data TABLE. lv_string = 'a,b,c,a'. lv_string2 = 'd,b,c,a'. JAKAA lv_string AT ',' TABLE:ksi lt_user. JAKAA lv_string2 AT ',' TABLE lt_user2. SILMUKAUS KENTTÄSYMBOLIN ( ). LISÄÄ TABLE lt_user. ENDLOOP. LAJITTELU lt_user Auth. POISTA LÄHETTÄVÄT DUPLIKAATIT LT_käyttäjästä VERTAILE auth. JOS sy-subrc = 0. SILMUKAUS lt_user ASSIGNING FIELD-SYMBOL( ). JOS lv_string_final ON ALKUPERÄINEN. lv_string_final = -tod. MUU. CONCATENATE lv_string_final -auth INTO lv_string_final EROTTAMALLA ','. LOPPU JOS. ENDLOOP. LOPPU JOS.
0 Kommentit