向上转型
前提 第一个必须有继承关系 曾父类->父亲->我
可以理解为子类 new一个
然后赋值给了父类,
子类转型到了父类。
向下转型
是父类转型到子类
三种模式
第一种:
?=
采用的是 lo_baba ?= lo_top_baba
第二种:
move ?=
move lo_top_baba move ?= lo_baba
第三种:
cast
cast lo_baba( lo_top_baba )
向下转型之前 父类对象需要要先向上转型
啥意思?
父类 = new 子类( ). 有了这个操作才可以向下转型
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( ).
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。