image.png
image.png

向上转型
前提 第一个必须有继承关系 曾父类->父亲->我
可以理解为子类 new一个
然后赋值给了父类,
子类转型到了父类。

向下转型
是父类转型到子类
三种模式
第一种:
?=
采用的是 lo_baba ?= lo_top_baba
第二种:
move ?=
move lo_top_baba move ?= lo_baba
第三种:
cast
cast lo_baba( lo_top_baba )

向下转型之前 父类对象需要要先向上转型
啥意思?
父类 = new 子类( ). 有了这个操作才可以向下转型

image.png
image.png
image.png
image.png

CLASS zcl_super_class_matl DEFINITION
  PUBLIC
  CREATE PUBLIC .

  PUBLIC SECTION.
    DATA:mv_material_id TYPE string.
    METHODS print_material_desc.

  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS zcl_super_class_matl IMPLEMENTATION.
  METHOD print_material_desc.
    WRITE: / '物料号吗 ', mv_material_id.
  ENDMETHOD.
ENDCLASS.
CLASS zcl_sub_matl_raw DEFINITION
  PUBLIC
  INHERITING FROM zcl_super_class_matl
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    METHODS print_material_desc REDEFINITION.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS zcl_sub_matl_raw IMPLEMENTATION.
  METHOD print_material_desc.
    CALL METHOD super->print_material_desc.

    WRITE: / '供应商号码', 'VEN0127'.
    WRITE: / '批次号码 ', 'MF01RAW209'.
    WRITE: / '采购日期 ', sy-datum.
  ENDMETHOD.
ENDCLASS.
CLASS zcl_sub_class_matl_semi DEFINITION
  PUBLIC
  INHERITING FROM zcl_super_class_matl
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    METHODS print_material_desc REDEFINITION.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS zcl_sub_class_matl_semi IMPLEMENTATION.
  METHOD print_material_desc.
    CALL METHOD super->print_material_desc.

*    WRITE: / '供应商号码', 'VEN0127'.
    WRITE: / '批次号码 ', 'MF01SEM537'.
    WRITE: / '重检日期 ', sy-datum.
  ENDMETHOD.
ENDCLASS.
CLASS zcl_sub_class_matl_fin DEFINITION
  PUBLIC
  INHERITING FROM zcl_super_class_matl
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    METHODS print_material_desc REDEFINITION.
    METHODS print_material_type.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS zcl_sub_class_matl_fin IMPLEMENTATION.
  METHOD print_material_desc.
    CALL METHOD super->print_material_desc.

    WRITE: / '批次号码 ', 'MF01FIN001'.
    WRITE: / '生产日期 ', sy-datum.
  ENDMETHOD.

  METHOD print_material_type.
    WRITE: / '物料类型' ,'FIN'.
  ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Report zrep_cls_013
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zrep_cls_013.
*定义类对象
DATA(go_super_matl) = NEW zcl_super_class_matl(  ).

DATA(go_sub_matl_raw) = NEW zcl_sub_matl_raw(  ).

DATA(go_sub_matl_semi) = NEW zcl_sub_class_matl_semi(  ).

DATA(go_sub_matl_fin) = NEW zcl_sub_class_matl_fin(  ).

go_super_matl->mv_material_id    = 'MATL001'.
go_sub_matl_raw->mv_material_id  = 'RAW001'.
go_sub_matl_semi->mv_material_id = 'SEMI001'.
go_sub_matl_fin->mv_material_id  = 'FIN001'.


WRITE: / '物料:'.

go_super_matl->print_material_desc(  ).
WRITE: /,/ '原料:'.

*上转型 测试多态下的原料类
go_super_matl = go_sub_matl_semi.
go_super_matl->print_material_desc(  ).


*上转型 测试多态下的半成品类
go_super_matl = go_sub_matl_raw.
go_super_matl->print_material_desc(  ).

*上转型 测试多态下的成品
go_super_matl = go_sub_matl_fin.
go_super_matl->print_material_desc(  ).


*下转型 测试成品类自身的方法
WRITE:/,/ '成品:'.
go_sub_matl_fin ?= go_super_matl.
go_sub_matl_fin->print_material_desc(  ).
go_sub_matl_fin->print_material_type(  ).

image.png


风口的猪会飞
13 声望20 粉丝

ABAP PI 开发 这个世界没有神,如果有那也是别人口中的神而已!


引用和评论

0 条评论