Кастинг во програмата ABAP

КЛАСА a1 ДЕФИНИЦИЈА.
 ЈАВЕН ДЕЛ.
 ПОДАТОЦИ: num1 ТИП i ВРЕДНОСТ 100.
 МЕТОДИ: m1.
 КРАЈ КЛАС.
 СПРОВЕДУВАЊЕ КЛАСА а1.
 МЕТОД m1.
 НАПИШИ: 'a1:',num1.
 КРАЈ МЕТОД.
 КРАЈ КЛАС.
 КЛАСА b1 ДЕФИНИЦИЈА НАСЛЕДУВАЊЕ ОД a1.
 ЈАВЕН ДЕЛ.
 МЕТОДИ: m2, m1 РЕДЕФИНИЦИЈА.
 КРАЈ КЛАС.
 КЛАСА б1 ИМПЛЕМЕНТАЦИЈА.
 МЕТОД m1.
 num1 = број1.
 НАПИШИ: 'b1:',num1.
 КРАЈ МЕТОД.
 МЕТОД m2.
 ПИШИ: 'M2 во класа b1'.
 КРАЈ МЕТОД.
 КРАЈ КЛАС.
 ПОЧЕТОК НА ИЗБОР.
 ПОДАТОЦИ: ТИП РЕФ НА a1.
 ПОДАТОЦИ: b ВНИМАТЕ РЕФ ДО b1.
 *податоци: в тип REF TO c1.
 ************************************************** ************** СОЗДАДЕТЕ ОБЈЕКТ б.
 a = b.  "upcasting CALL METHOD a->m1( ).
 *повикај МЕТОД a->m2( ).  „Не можеме да пристапиме до методите на сопствената подкласа користејќи ref.
 НОВА ЛИНИЈА.
 b ?= a.  МЕТОД НА ПОВИКУВАЊЕ надолу b->m1( ).
 НОВА ЛИНИЈА.
 МЕТОД НА ПОВИКУВАЊЕ b->m2( ).
 ************************************************** *************** " грешка null ref креирај ОБЈЕКТ a.
 b ?= a.  МЕТОД b->m1( ).
 ************************************************** *************** СОЗДАДЕТЕ ОБЈЕКТ a.
 ПРОБАЈ.
 b ?= a.  „Се обидовте да користите „NULL“ референца на објект CATCH cx_sy_move_cast_error.
 МЕТОД НА ПОВИКУВАЊЕ b->m1( ).
 КРАЈ.
 ************************************************** *************** СОЗДАДЕТЕ ОБЈЕКТ a.
 КРЕИРАЈ ОБЈЕКТ б.
 ПРОБАЈ.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 МЕТОД НА ПОВИКУВАЊЕ b->m1( ).
 повикај МЕТОД b->m2( ).
 КРАЈ.
 КЛАСА lcl_shape ДЕФИНИЦИЈА.
 ЈАВЕН ДЕЛ.
 МЕТОДИ нерешено.
 КРАЈ КЛАС.
 КЛАСА lcl_circle ДЕФИНИЦИЈА КОИ СЕ НАСЛЕДУВА ОД lcl_shape.
 ЈАВЕН ДЕЛ.
 МЕТОДИ: нацртајте РЕДЕФИНИЦИЈА, пресметување_површина.
 КРАЈ КЛАС.
 КЛАСА lcl_shape ИМПЛЕМЕНТАЦИЈА.
 МЕТОД извлекување.
 ПИШИ :/ „Цртање каква било форма“.
 КРАЈ МЕТОД.
 КРАЈ КЛАС.
 CLASS lcl_circle ИМПЛЕМЕНТАЦИЈА.
 МЕТОД извлекување.
 ПИШИ :/ 'Цртање специфична форма: Круг'.
 КРАЈ МЕТОД.
 МЕТОД пресметување_површина.
 НАПИШИ :/ „Плоштина на округот = 2iiR“.
 КРАЈ МЕТОД.
 КРАЈ КЛАС.
 ПОЧЕТОК НА ИЗБОР.
 ПОДАТОЦИ : o_cir ВНИМАТЕ REF TO lcl_circle.
 КРЕИРАЈ ОБЈЕКТ o_cir.
 НАЧИН НА ПОВИК o_cir->draw( ).  " го повикува методот Draw() на поткласата НАЧИН НА ПОВИК o_cir->calc_area( ).
 ULINE.
 "--------- Тесен cast(Upcast)----------------" ПОДАТОЦИ : o_shp TYPE REF TO lcl_shape.
 o_shp = o_cir.  " Тесен cast(Upcast) НАЧИН НА ПОВИК o_shp->draw( ).  " го повикува методот на подкласа Draw() " call METHOD o_shp->calc_area( ) .  " Грешка при компилација ULINE.
 "---------- Проширување на Cast(Downcast) -----------" ПОДАТОЦИ : o_cir1 ВИПИ REF TO lcl_circle.
 " o_cir1 = o_shp.  " Грешка при компилација o_cir1 ?= o_shp.  " Проширување на Cast(Downcast) НАЧИН НА ПОВИК o_cir1->draw( ).  " го повикува методот Draw() на поткласата НАЧИН НА ПОВИК o_cir1->calc_area( ).
 КЛАСА a1 ДЕФИНИЦИЈА.
 ЈАВЕН ДЕЛ.
 ПОДАТОЦИ: num1 ТИП i ВРЕДНОСТ 100.
 МЕТОДИ: m1.
 КРАЈ КЛАС.
 СПРОВЕДУВАЊЕ КЛАСА а1.
 МЕТОД m1.
 НАПИШИ: 'a1:',num1.
 КРАЈ МЕТОД.
 КРАЈ КЛАС.
 КЛАСА b1 ДЕФИНИЦИЈА НАСЛЕДУВАЊЕ ОД a1.
 ЈАВЕН ДЕЛ.
 МЕТОДИ: m2, m1 РЕДЕФИНИЦИЈА.
 КРАЈ КЛАС.
 КЛАСА б1 ИМПЛЕМЕНТАЦИЈА.
 МЕТОД m1.
 num1 = број1.
 НАПИШИ: 'b1:',num1.
 КРАЈ МЕТОД.
 МЕТОД m2.
 ПИШИ: 'M2 во класа b1'.
 КРАЈ МЕТОД.
 КРАЈ КЛАС.
 ПОЧЕТОК НА ИЗБОР.
 ПОДАТОЦИ: родител ТИП REF TO a1.
 ПОДАТОЦИ: дете ТИП REF TO b1.
 *податоци: в тип REF TO c1.
 ************************************************** ************** КРЕИРАЈ ОБЈЕКТ дете.
 родител = дете.  "upcasting CALL METHOD родител->m1( ).
 НАЧИН НА ПОВИК дете->m1( ).
 НАЧИН НА ПОВИК дете->m2( ).
 *повикај МЕТОД a->m2( ).  „Не можеме да пристапиме до методите на сопствената подкласа користејќи ref.
 НОВА ЛИНИЈА.
 дете ?= родител.  "надолу кастинг НАЧИН НА ПОВИК дете->m1( ).
 НОВА ЛИНИЈА.
 НАЧИН НА ПОВИК дете->m2( ).
 ************************************************** **************** *" грешка null ref *create OBJECT a.
 *б ?= а.  „надолу фрлајќи го уште неговото давање депонија *повикајте МЕТОД b->m1( ).
 ************************************************** ************* * КРЕИРАЈ ОБЈЕКТ a.
 ПРОБАЈ.
 b ?= a.  „Се обидовте да користите „NULL“ референца на објект CATCH cx_sy_move_cast_error.
 МЕТОД НА ПОВИКУВАЊЕ b->m1( ).
 КРАЈ.
 ************************************************** ************* * КРЕИРАЈ ОБЈЕКТ a.
 КРЕИРАЈ ОБЈЕКТ б.
 ПРОБАЈ.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 МЕТОД НА ПОВИКУВАЊЕ b->m1( ).
 повикај МЕТОД b->m2( ).
 КРАЈ.
 ******** Единствени вредности******************** ПОДАТОЦИ : низа TYPE lv_string, низа TYPE lv_string2 TYPE, lv_string_final TYPE низа.
 ВИДОВИ: ПОЧЕТОК НА ty_data, auth ТИП c, КРАЈ НА ty_data.
 ПОДАТОЦИ: 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'.
 ПОДЕЛИ lv_string AT ',' INTO TABLE lt_user.
 ПОДЕЛИ lv_string2 AT ',' ВО ТАБЕЛА lt_user2.
 КРАЈТЕ НА lt_user2 ДОДЕЛУВАЊЕ НА ПОЛЕ-СИМБОЛ( ).
 ВНЕСЕТЕ ВО ТАБЕЛА lt_user.
 ENDLOOP.
 SORT lt_user BY auth.
 ИЗБРИШИ СОСЕДНИ ДУПЛИКАТИ ОД lt_user СПОРЕДУВАЈЌИ авт.
 АКО sy-subrc = 0.
 КРАЈТЕ НА lt_user НАДЕЛУВАЊЕ НА FIELD-SYMBOL( ).
 АКО lv_string_final Е ПОЧЕТНИ.
 lv_string_final = -автомат.
 ДРУГО.
 CONCATENATE lv_string_final -авут ВО lv_string_final ОДДЕЛЕНИ СО ','.
 ENDIF.
 ENDLOOP.
 ENDIF.

 

Остави коментар

Оваа страница користи Akismet за намалување на спам. Научете како се обработува вашиот коментар.