Preface – This post is part of the ABAP Programs series.
CLASS a1 DEFINITION. PUBLIC SECTION. DATA: num1 TYPE i VALUE 100. METHODS:m1. ENDCLASS. CLASS a1 IMPLEMENTATION. METHOD m1. WRITE: 'a1:',num1. ENDMETHOD. ENDCLASS. CLASS b1 DEFINITION INHERITING FROM a1. PUBLIC SECTION. METHODS:m2, m1 REDEFINITION. ENDCLASS. CLASS b1 IMPLEMENTATION. METHOD m1. num1 = num1 . WRITE: 'b1:',num1. ENDMETHOD. METHOD m2. WRITE: 'M2 in class b1'. ENDMETHOD. ENDCLASS. START-OF-SELECTION. DATA: a TYPE REF TO a1. DATA: b TYPE REF TO b1. *data: c type REF TO c1. **************************************************************** CREATE OBJECT b. a = b. "upcasting CALL METHOD a->m1( ). *call METHOD a->m2( ). " we can't access the own sub class methods using super class ref. NEW-LINE. b ?= a. " down casting CALL METHOD b->m1( ). NEW-LINE. CALL METHOD b->m2( ). ***************************************************************** " error null ref create OBJECT a. b ?= a. "down casting still its giving dump call METHOD b->m1( ). ***************************************************************** CREATE OBJECT a. TRY. b ?= a. "u r attempted to use a 'NULL' object reference dump CATCH cx_sy_move_cast_error. CALL METHOD b->m1( ). ENDTRY. ***************************************************************** CREATE OBJECT a. CREATE OBJECT b. TRY. b ?= a. CATCH cx_sy_move_cast_error. CALL METHOD b->m1( ). call METHOD b->m2( ). ENDTRY. CLASS lcl_shape DEFINITION. PUBLIC SECTION. METHODS draw. ENDCLASS. CLASS lcl_circle DEFINITION INHERITING FROM lcl_shape. PUBLIC SECTION. METHODS: draw REDEFINITION, calc_area. ENDCLASS. CLASS lcl_shape IMPLEMENTATION. METHOD draw. WRITE :/ 'Drawing any Shape'. ENDMETHOD. ENDCLASS. CLASS lcl_circle IMPLEMENTATION. METHOD draw. WRITE :/ 'Drawing specific shape: Circle'. ENDMETHOD. METHOD calc_area. WRITE :/ 'Area Of Crcle = 2iiR'. ENDMETHOD. ENDCLASS. START-OF-SELECTION. DATA : o_cir TYPE REF TO lcl_circle. CREATE OBJECT o_cir. CALL METHOD o_cir->draw( ). " calls subclass Draw() method CALL METHOD o_cir->calc_area( ). ULINE. "--------- Narrow cast(Upcast)---------------" DATA : o_shp TYPE REF TO lcl_shape. o_shp = o_cir. " Narrow cast(Upcast) CALL METHOD o_shp->draw( ). " calls sub class Draw() method "call METHOD o_shp->calc_area( ) . " compilation error ULINE. "---------- Widening Cast(Downcast) -----------" DATA : o_cir1 TYPE REF TO lcl_circle. " o_cir1 = o_shp. " complilation error o_cir1 ?= o_shp. " Widening Cast(Downcast) CALL METHOD o_cir1->draw( ). " calls subclass Draw() method CALL METHOD o_cir1->calc_area( ). CLASS a1 DEFINITION. PUBLIC SECTION. DATA: num1 TYPE i VALUE 100. METHODS:m1. ENDCLASS. CLASS a1 IMPLEMENTATION. METHOD m1. WRITE: 'a1:',num1. ENDMETHOD. ENDCLASS. CLASS b1 DEFINITION INHERITING FROM a1. PUBLIC SECTION. METHODS:m2, m1 REDEFINITION. ENDCLASS. CLASS b1 IMPLEMENTATION. METHOD m1. num1 = num1 . WRITE: 'b1:',num1. ENDMETHOD. METHOD m2. WRITE: 'M2 in class b1'. ENDMETHOD. ENDCLASS. START-OF-SELECTION. DATA: parent TYPE REF TO a1. DATA: child TYPE REF TO b1. *data: c type REF TO c1. **************************************************************** CREATE OBJECT child. parent = child. "upcasting CALL METHOD parent->m1( ). CALL METHOD child->m1( ). CALL METHOD child->m2( ). *call METHOD a->m2( ). " we can't access the own sub class methods using super class ref. NEW-LINE. child ?= parent. " down casting CALL METHOD child->m1( ). NEW-LINE. CALL METHOD child->m2( ). ****************************************************************** *" error null ref *create OBJECT a. *b ?= a. "down casting still its giving dump *call METHOD b->m1( ). ****************************************************************** * CREATE OBJECT a. TRY. b ?= a. "u r attempted to use a 'NULL' object reference dump CATCH cx_sy_move_cast_error. CALL METHOD b->m1( ). ENDTRY. ****************************************************************** * CREATE OBJECT a. CREATE OBJECT b. TRY. b ?= a. CATCH cx_sy_move_cast_error. CALL METHOD b->m1( ). call METHOD b->m2( ). ENDTRY. ******** Unique Values****************** DATA : lv_string TYPE string, lv_string2 TYPE string, lv_string_final TYPE string. TYPES: BEGIN OF ty_data, auth TYPE c, END OF ty_data. 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'. SPLIT lv_string AT ',' INTO TABLE lt_user. SPLIT lv_string2 AT ',' INTO TABLE lt_user2. LOOP AT lt_user2 ASSIGNING FIELD-SYMBOL(<fs_field>). INSERT <fs_field> INTO TABLE lt_user. ENDLOOP. SORT lt_user BY auth. DELETE ADJACENT DUPLICATES FROM lt_user COMPARING auth. IF sy-subrc = 0. LOOP AT lt_user ASSIGNING FIELD-SYMBOL(<fs_user_table>). IF lv_string_final IS INITIAL. lv_string_final = <fs_user_table>-auth. ELSE. CONCATENATE lv_string_final <fs_user_table>-auth INTO lv_string_final SEPARATED BY ','. ENDIF. ENDLOOP. ENDIF. WRITE lv_string_final.
0 Comments