Casting ໃນໂຄງການ ABAP

CLASS a1 ຄໍານິຍາມ.
 ພາກສ່ວນສາທາລະນະ.
 ຂໍ້ມູນ: ໝາຍເລກ 1 ປະເພດ ແລະ VALUE 100.
 ວິທີການ: m1.
 ENDCLASS.
 ຫ້ອງຮຽນ a1 ການຈັດຕັ້ງປະຕິບັດ.
 ວິທີການ m1.
 ຂຽນ: 'a1:', ເລກ 1.
 ENDMETHOD.
 ENDCLASS.
 CLASS b1 ຄໍານິຍາມການສືບທອດມາຈາກ a1.
 ພາກສ່ວນສາທາລະນະ.
 ວິທີການ: m2, m1 REDEFINITION.
 ENDCLASS.
 CLASS b1 ການຈັດຕັ້ງປະຕິບັດ.
 ວິທີການ m1.
 num1 = ເລກ 1 .
 ຂຽນ: 'b1:', ເລກ 1.
 ENDMETHOD.
 ວິທີການ m2.
 ຂຽນ: 'M2 ໃນຫ້ອງຮຽນ b1'.
 ENDMETHOD.
 ENDCLASS.
 ການເລີ່ມຕົ້ນຂອງການເລືອກ.
 ຂໍ້ມູນ: ປະເພດອ້າງອີງເຖິງ a1.
 ຂໍ້ມູນ: b ປະເພດອ້າງອີງເຖິງ b1.
 *ຂໍ້ມູນ: c ປະເພດ REF TO c1.
 ******************************************************* ************** ສ້າງວັດຖຸ ຂ.
 a = ຂ.  "ວິທີການໂທຫາ upcast a->m1( ).
 *ໂທ METOD a->m2( ).  "ພວກເຮົາບໍ່ສາມາດເຂົ້າເຖິງວິທີການຂອງຊັ້ນຍ່ອຍຂອງຕົນເອງໂດຍໃຊ້ super class ref.
 NEW-LINE.
 b ?= ກ.  " downcast CALL METOD b->m1( ).
 NEW-LINE.
 ໂທຫາວິທີການ b->m2( ).
 ******************************************************* *************** " error null ref ສ້າງ OBJECT a.
 b ?= ກ.  "ການລົງ Casting ຍັງຄົງໂທຫາການຖິ້ມຂີ້ເຫຍື້ອ b->m1( ).
 ******************************************************* *************** ສ້າງວັດຖຸ ກ.
 ພະຍາຍາມ.
 b ?= ກ.  "ເຈົ້າພະຍາຍາມໃຊ້ການຖິ້ມການອ້າງອີງວັດຖຸ 'NULL' CATCH cx_sy_move_cast_error.
 ໂທຫາວິທີການ b->m1( ).
 ENDTRY.
 ******************************************************* *************** ສ້າງວັດຖຸ ກ.
 ສ້າງວັດຖຸ ຂ.
 ພະຍາຍາມ.
 b ?= ກ.
 CATCH cx_sy_move_cast_error.
 ໂທຫາວິທີການ b->m1( ).
 ໂທຫາ METHOD b->m2( ).
 ENDTRY.
 CLASS lcl_shape DEFINITION.
 ພາກສ່ວນສາທາລະນະ.
 METHODS ແຕ້ມ.
 ENDCLASS.
 CLASS lcl_circle ຄໍານິຍາມ INHERITING ຈາກ lcl_shape.
 ພາກສ່ວນສາທາລະນະ.
 ວິທີການ: ແຕ້ມ REDEFINITION, calc_area.
 ENDCLASS.
 CLASS lcl_shape IMPLEMENTATION.
 ວິທີການແຕ້ມ.
 ຂຽນ :/ 'ແຕ້ມຮູບຮ່າງໃດນຶ່ງ'.
 ENDMETHOD.
 ENDCLASS.
 CLASS lcl_circle IMPLEMENTATION.
 ວິທີການແຕ້ມ.
 WRITE :/ 'ແຕ້ມຮູບຮ່າງສະເພາະ: ວົງມົນ'.
 ENDMETHOD.
 METHOD calc_area.
 WRITE :/ 'Area Of Crcle = 2iiR'.
 ENDMETHOD.
 ENDCLASS.
 ການເລີ່ມຕົ້ນຂອງການເລືອກ.
 ຂໍ້ມູນ : o_cir TYPE REF TO lcl_circle.
 ສ້າງ OBJECT o_cir.
 ໂທຫາວິທີການ o_cir->draw( ).  " ໂທຫາ 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.  " ໂຫວດແຄບ(Upcast) ໂທຫາວິທີການ o_shp->draw( ).  " calls sub class Draw() method "ໂທຫາ METHOD o_shp->calc_area() .  " ການລວບລວມຄວາມຜິດພາດ ULINE.
 "---------- Widening Cast(Downcast) -----------" DATA : o_cir1 TYPE REF TO lcl_circle.
 " o_cir1 = o_shp.  " ຄວາມຜິດພາດການລວບລວມ o_cir1 ?= o_shp.  " Widening Cast(Downcast) ໂທຫາວິທີການ o_cir1->draw( ).  " ໂທຫາ subclass Draw() method CALL METHOD o_cir1->calc_area( ).
 CLASS a1 ຄໍານິຍາມ.
 ພາກສ່ວນສາທາລະນະ.
 ຂໍ້ມູນ: ໝາຍເລກ 1 ປະເພດ ແລະ VALUE 100.
 ວິທີການ: m1.
 ENDCLASS.
 ຫ້ອງຮຽນ a1 ການຈັດຕັ້ງປະຕິບັດ.
 ວິທີການ m1.
 ຂຽນ: 'a1:', ເລກ 1.
 ENDMETHOD.
 ENDCLASS.
 CLASS b1 ຄໍານິຍາມການສືບທອດມາຈາກ a1.
 ພາກສ່ວນສາທາລະນະ.
 ວິທີການ: m2, m1 REDEFINITION.
 ENDCLASS.
 CLASS b1 ການຈັດຕັ້ງປະຕິບັດ.
 ວິທີການ m1.
 num1 = ເລກ 1 .
 ຂຽນ: 'b1:', ເລກ 1.
 ENDMETHOD.
 ວິທີການ m2.
 ຂຽນ: 'M2 ໃນຫ້ອງຮຽນ b1'.
 ENDMETHOD.
 ENDCLASS.
 ການເລີ່ມຕົ້ນຂອງການເລືອກ.
 ຂໍ້ມູນ: ປະເພດຫຼັກ REF TO a1.
 ຂໍ້ມູນ: ປະເພດເດັກນ້ອຍອ້າງອີງເຖິງ b1.
 *ຂໍ້ມູນ: c ປະເພດ REF TO c1.
 ******************************************************* ************** ສ້າງ​ສິ່ງ​ຂອງ​ເດັກ​.
 ພໍ່ແມ່ = ລູກ.  "upcasting CALL METOD parent->m1( ).
 ໂທຫາວິທີການ child->m1( ).
 ໂທຫາວິທີການ child->m2( ).
 *ໂທ METOD a->m2( ).  "ພວກເຮົາບໍ່ສາມາດເຂົ້າເຖິງວິທີການຂອງຊັ້ນຍ່ອຍຂອງຕົນເອງໂດຍໃຊ້ super class ref.
 NEW-LINE.
 ເດັກ ?= ພໍ່ແມ່.  " downcast CALL METOD child->m1( ).
 NEW-LINE.
 ໂທຫາວິທີການ child->m2( ).
 ******************************************************* **************** *" error null ref *create OBJECT a.
 *b ?= ກ.  "ການຖິ້ມຂີ້ເຫຍື້ອລົງແມ່ນຍັງຖິ້ມຂີ້ເຫຍື້ອ *ໂທຫາວິທີການ b->m1( ).
 ******************************************************* **************** * ສ້າງວັດຖຸ ກ.
 ພະຍາຍາມ.
 b ?= ກ.  "ເຈົ້າພະຍາຍາມໃຊ້ການຖິ້ມການອ້າງອີງວັດຖຸ 'NULL' CATCH cx_sy_move_cast_error.
 ໂທຫາວິທີການ b->m1( ).
 ENDTRY.
 ******************************************************* **************** * ສ້າງວັດຖຸ ກ.
 ສ້າງວັດຖຸ ຂ.
 ພະຍາຍາມ.
 b ?= ກ.
 CATCH cx_sy_move_cast_error.
 ໂທຫາວິທີການ b->m1( ).
 ໂທຫາ METHOD b->m2( ).
 ENDTRY.
 ****** ຄຸນຄ່າທີ່ເປັນເອກະລັກ******************** DATA : lv_string TYPE string, lv_string2 TYPE string, lv_string_final TYPE string.
 ປະເພດ: BEGIN ຂອງ ty_data, auth TYPE c, END ຂອງ 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( ).
 ແຊກ ເຂົ້າໄປໃນຕາຕະລາງ lt_user.
 ສິ້ນສຸດ.
 SORT lt_user BY auth.
 ລຶບຂໍ້ມູນຊໍ້າກັນທີ່ຢູ່ໃກ້ຄຽງອອກຈາກ lt_user ປຽບທຽບການພິສູດສິດ.
 IF sy-subrc = 0.
 LOOP AT lt_user ASSIGNING FIELD-SYMBOL( ).
 ຖ້າ lv_string_final ແມ່ນເບື້ອງຕົ້ນ.
 lv_string_final = - ຄວາມຖືກຕ້ອງ.
 ອື່ນ.
 CONCATENATE lv_string_final -auth INTO lv_string_final ແຍກໂດຍ ','.
 ENDIF.
 ສິ້ນສຸດ.
 ENDIF.

 

ອອກຄໍາເຫັນເປັນ

ເວັບໄຊທ໌ນີ້ໃຊ້ Akismet ເພື່ອຫຼຸດຜ່ອນການຂີ້ເຫຍື້ອ. ຮຽນຮູ້ວິທີທີ່ຂໍ້ມູນຂອງທ່ານຖືກປະຕິບັດ.