二维码

[面向对象] abap面向对象中的构造函数使用教程

Twilight发表于 2014-02-22 17:02Twilight 最后回复于 2014-02-22 17:02 [复制链接] 4445 0

练习3 构造函数
1、编写构造函数,在创建对象的时候就可以设定属性,更改创建对象的语句,去掉 set_attributes方法。
练习4 方法的编写与调用
1、编写一个方法get_technical_attributes  传入参数  im_type,飞机类型,输出参数ex_weight  ex_tankcap  类型分别为 s_plan_wei   s_capacity.
从saplane表中读取对应的数据
2、在display_attributes方法中调用这个方法,将这两个输出字段在屏幕进行输出

程序执行效果:
abap面向对象中的构造函数.jpg
主程序代码:
  1. REPORT  ZBC10_EX_4.  "构造函数  主要用来在创建对象时初始化对象 即为对象成员变量赋初始值  重载
  2. INCLUDE ZBC10_EX_A_4.

  3. DATA:R_AIRPLANE TYPE REF TO LCL_AIRPLANE, "相当于结构
  4.      RT_AIRPLANE TYPE TABLE OF REF TO LCL_AIRPLANE. "相当于内表

  5. START-OF-SELECTION. "面向对象必须写,面向过程可以不写
  6.   CALL METHOD LCL_AIRPLANE=>DISPLAY_N_O_AIRPLANES( ).  "静态方法DISPLAY_N_O_AIRPLANES
  7.   CREATE OBJECT R_AIRPLANE EXPORTING IM_NAME = '001'
  8.                                      IM_PLANETYPE = '747-400'.
  9. *  R_AIRPLANE->SET_ATTRIBUTES( IM_NAME = '001' IM_PLANETYPE = '747-400' ). "对象的方法SET_ATTRIBUTES( )
  10.   APPEND R_AIRPLANE TO RT_AIRPLANE.

  11.   CALL METHOD LCL_AIRPLANE=>DISPLAY_N_O_AIRPLANES( ).
  12.   CREATE OBJECT R_AIRPLANE EXPORTING IM_NAME = '002'
  13.                                      IM_PLANETYPE = '747-500'.
  14. *  R_AIRPLANE->SET_ATTRIBUTES( IM_NAME = '002' IM_PLANETYPE = '747-500' ).
  15.   APPEND R_AIRPLANE TO RT_AIRPLANE.

  16.   LOOP AT RT_AIRPLANE INTO R_AIRPLANE.
  17.     R_AIRPLANE->DISPLAY_ATTRIBUTES( ).
  18.   ENDLOOP.
复制代码
INCLUDE ZBC10_EX_A_4.
  1. *&---------------------------------------------------------------------*
  2. *&  Include           ZBC10_EX_A
  3. *&---------------------------------------------------------------------*
  4. CLASS LCL_AIRPLANE DEFINITION.
  5.   PUBLIC SECTION.
  6.     METHODS:CONSTRUCTOR IMPORTING IM_NAME TYPE  STRING
  7.                                   IM_PLANETYPE TYPE SAPLANE-PLANETYPE.
  8.     CLASS-METHODS:DISPLAY_N_O_AIRPLANES.
  9.     METHODS:DISPLAY_ATTRIBUTES.
  10.   PRIVATE SECTION.
  11.     DATA:NAME TYPE  STRING,
  12.          PLANETYPE TYPE SAPLANE-PLANETYPE.
  13.     CLASS-DATA:N_0_ARIPLANES TYPE I.
  14.     METHODS:GET_TECHNICAL_ATTRIBUTES IMPORTING IM_TYPE TYPE SAPLANE-PLANETYPE
  15.                                      EXPORTING EX_WEIGHT  TYPE S_PLAN_WEI
  16.                                                EX_TANKCAP TYPE   S_CAPACITY.
  17. ENDCLASS.                    "LCL_AIRPLANE DEFINITION

  18. *----------------------------------------------------------------------*
  19. *       CLASS LCL_AIRPLANE IMPLEMENTATION
  20. *----------------------------------------------------------------------*
  21. *
  22. *----------------------------------------------------------------------*
  23. CLASS LCL_AIRPLANE IMPLEMENTATION.
  24.   METHOD CONSTRUCTOR.
  25.     NAME = IM_NAME.
  26.     PLANETYPE = IM_PLANETYPE.
  27.     N_0_ARIPLANES = N_0_ARIPLANES + 1.
  28.   ENDMETHOD.                    "SET_ATTRIBUTES
  29.   METHOD DISPLAY_N_O_AIRPLANES.
  30.     WRITE: / 'Number of airplanes:',N_0_ARIPLANES.
  31.   ENDMETHOD.                    "DISPLAY_N_O_AIRPLANES
  32.   METHOD DISPLAY_ATTRIBUTES.
  33.     DATA:WEIGHT  TYPE S_PLAN_WEI,
  34.          TANKCAP TYPE   S_CAPACITY.
  35.     ME->GET_TECHNICAL_ATTRIBUTES( EXPORTING IM_TYPE = PLANETYPE    "在类里引用自身的方法用ME  这里的EXPORTING相当于IMPORTING 相反的
  36.                                   IMPORTING EX_WEIGHT = WEIGHT
  37.                                             EX_TANKCAP = TANKCAP ).
  38.     WRITE: / 'name',NAME,'planetype',PLANETYPE,'weight',WEIGHT,'tankcap',TANKCAP.
  39.   ENDMETHOD.                    "display_attributes
  40.   METHOD GET_TECHNICAL_ATTRIBUTES.
  41.     SELECT SINGLE WEIGHT TANKCAP
  42.       INTO (EX_WEIGHT,EX_TANKCAP)
  43.       FROM SAPLANE
  44.       WHERE PLANETYPE = IM_TYPE.
  45.     IF SY-SUBRC NE 0.
  46.       EX_WEIGHT = 0.
  47.       EX_TANKCAP = 0.
  48.     ENDIF.
  49.   ENDMETHOD.
  50. ENDCLASS.                    "LCL_AIRPLANE IMPLEMENTATION
复制代码

回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表