下面是实例代码 首先定义一个父类
zcl_super_class_mat
记住不能让他final,
final 基本完犊子了,继承不了,可以理解为爸爸变成太监了。
那么我们看看继承代码
zcl_sub_class_mat_raw 继承自zcl_super_class_mat

我们可以重新定义 zcl_super_class_mat 的方法,这是什么意思?就是说我虽然来源于你,但是我可以在我的方法里干别的事情。
我还可以干别的事情(自己的方法),当然zcl_sub_class_mat_raw 如果不定义成final 我觉得还可以继承下去
一直继承到脑瓜子嗡嗡的。

还有一个知识点就是父亲的私有方法是不能继承的。
子类继承父类后重新实现父类的方法,
写的是在子类方法结尾加上 REDEFINITION(重定义),
重新定义方法时,方法的参数是不能改变的,
如果一定要改变设定新的输入输出参数,可以考虑增加子类的新的属性,然后用重新定义的方法访问这些新的属性作为参数。
继承父类的构造器是不能重新定义的

子类是可以访问父类的
例如父类有个方法 method01.
在重定义的子类方法 method01里面采用
call method super->method01
这个还必须是 在子类的method01里面 不能在子类的method02里面。
可能个人理解的不对,请多多指教。

CLASS zcl_super_class_mat DEFINITION
  PUBLIC
  CREATE PUBLIC .

  PUBLIC SECTION.
    DATA:mv_material_id TYPE mara-matnr.
    METHODS set_material_id
      IMPORTING
        !iv_material_id TYPE mara-matnr.
  PROTECTED SECTION.
    DATA mv_material_name TYPE makt-maktx.
    METHODS get_material_name
      RETURNING VALUE(rv_material_name) TYPE makt-maktx.

  PRIVATE SECTION.
    DATA mv_material_desc TYPE string.
    METHODS get_material_desc
      RETURNING VALUE(rv_material_desc) TYPE string.
ENDCLASS.



CLASS zcl_super_class_mat IMPLEMENTATION.
  METHOD get_material_desc.
    rv_material_desc = mv_material_desc.
  ENDMETHOD.

  METHOD get_material_name.
    rv_material_name = mv_material_desc.
  ENDMETHOD.

  METHOD set_material_id.
    mv_material_id = iv_material_id.
    WRITE: / 'Material:',mv_material_id.
  ENDMETHOD.




ENDCLASS.
CLASS zcl_sub_class_mat_raw DEFINITION
  PUBLIC
  INHERITING FROM zcl_super_class_mat
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.

    METHODS get_material_type
      IMPORTING
                !iv_material_id         TYPE mara-matnr
      RETURNING VALUE(rv_material_type) TYPE mara-mtart.

    METHODS set_material_id
        REDEFINITION .
  PROTECTED SECTION.

    METHODS get_material_name
        REDEFINITION .
  PRIVATE SECTION.
    DATA mv_material_type TYPE mara-mtart.
ENDCLASS.



CLASS zcl_sub_class_mat_raw IMPLEMENTATION.


  METHOD get_material_name.
*CALL METHOD SUPER->GET_MATERIAL_NAME
*  RECEIVING
*    RV_MATERIAL_NAME =
*    .

*    mv_material_id = iv_material_id.
    WRITE: / 'RAW Material:',mv_material_id.
  ENDMETHOD.


  METHOD get_material_type.
*    mv_material_id = iv_material_id.
*    WRITE: /  'RAW material:',mv_material_id.
    DATA:ls_mara TYPE mara.
    SELECT SINGLE mtart FROM mara INTO ( ls_mara-mtart )
    WHERE matnr = iv_material_id.

    IF sy-subrc = 0.
      rv_material_type = ls_mara-mtart.
    ELSE.
      rv_material_type = ''.
    ENDIF.


    WRITE:/ 'material_type:',rv_material_type.
  ENDMETHOD.


  METHOD set_material_id.
*CALL METHOD SUPER->SET_MATERIAL_ID
*  EXPORTING
*    IV_MATERIAL_ID =
*    .

    mv_material_id = iv_material_id.
    WRITE: / 'Raw Material: ', mv_material_id.
  ENDMETHOD.
ENDCLASS.

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

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


引用和评论

0 条评论