二维码

[面向对象] abap面向对象中的继承使用教程

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

使用继承创建一般化/特殊化关系:一个子类可以继承父类的所有主要特征。子类还可以添加新组件(属性、方法等),并用继承方法替换父类的实施。

练习5  使用继承
1、将类lcl_airplane里的私有区域,改为保护的区域,便于子类访问
2、建立包含程序ZBC10_EX_MAIN_AIRPLANE_B,定义子类lcl_passenger_plane,子类中要定义三个东西  
私有实例属性:max_seats  类型  sflight-seatsmax
构造函数:要为所有的属性赋值
重新定义display_arrtibutes,wirte语句输出所有的属性
3、建立子类 lcl_cargo_plane 包含以下属性和方法
(1)私有实例属性:max_cargo  类型 saplane-cargomax
(2)重写的构造函数
(3)重新定义display_attributes方法
4、到主程序中,建立这两个字类的实例,并在每次建立之前调用display_n_o_aieplanes静态方法
调用display_attributes

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

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

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

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

  18.   LOOP AT RT_AIRPLANE INTO R_AIRPLANE.
  19.     R_AIRPLANE->DISPLAY_ATTRIBUTES( ).
  20.   ENDLOOP.

  21. *--------------------------------------------------------------------*
  22. *  子类实施
  23. *--------------------------------------------------------------------*
  24. DATA: R_PASSENGER_PLANE TYPE REF TO LCL_PASSENGER_PLANE.
  25. DATA: R_CARGO_PLANE TYPE REF TO LCL_CARGO_PLANE.

  26. CREATE OBJECT R_PASSENGER_PLANE EXPORTING IM_NAME = '003'
  27.                                           IM_PLANETYPE = '747-400'
  28.                                           IM_MAXSEATS = '200'.
  29. R_PASSENGER_PLANE->DISPLAY_ATTRIBUTES( ).

  30. CREATE OBJECT R_CARGO_PLANE EXPORTING IM_NAME = '004'
  31.                                       IM_PLANETYPE = '747-400'
  32.                                       IM_MAXCARGO = '300'.
  33. R_CARGO_PLANE->DISPLAY_ATTRIBUTES( ).
复制代码

INCLUDE ZBC10_EX_A_5.
  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.   PROTECTED 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.                    "GET_TECHNICAL_ATTRIBUTES
  50. ENDCLASS.                    "LCL_AIRPLANE IMPLEMENTATION
复制代码

INCLUDE ZBC10_EX_B_5.
  1. *&---------------------------------------------------------------------*
  2. *&  Include           ZBC10_EX_B_5
  3. *&---------------------------------------------------------------------*
  4. CLASS LCL_PASSENGER_PLANE DEFINITION INHERITING FROM LCL_AIRPLANE.
  5.   PUBLIC SECTION.
  6.     METHODS:CONSTRUCTOR IMPORTING IM_NAME TYPE  STRING
  7.                                   IM_PLANETYPE TYPE SAPLANE-PLANETYPE
  8.                                   IM_MAXSEATS TYPE  SAPLANE-SEATSMAX.
  9.     METHODS DISPLAY_ATTRIBUTES REDEFINITION.
  10.   PRIVATE SECTION.
  11.     DATA:  MAXSEATS TYPE SAPLANE-SEATSMAX.

  12. ENDCLASS.                    "lcl_passenger_plane DEFINITION
  13. CLASS LCL_PASSENGER_PLANE IMPLEMENTATION.
  14.   METHOD CONSTRUCTOR.
  15.     SUPER->CONSTRUCTOR( IM_NAME = IM_NAME IM_PLANETYPE = IM_PLANETYPE ).
  16.     MAXSEATS = IM_MAXSEATS.
  17.   ENDMETHOD.
  18.   METHOD DISPLAY_ATTRIBUTES.
  19.    SUPER->DISPLAY_ATTRIBUTES( ).
  20.    WRITE: 'MAXSEAT',MAXSEATS.
  21.   ENDMETHOD.
  22. ENDCLASS.
复制代码

INCLUDE ZBC10_EX_C_5.
  1. *&---------------------------------------------------------------------*
  2. *&  Include           ZBC10_EX_C_5
  3. *&---------------------------------------------------------------------*
  4. CLASS LCL_CARGO_PLANE DEFINITION INHERITING FROM LCL_AIRPLANE.
  5.   PUBLIC SECTION.
  6.     METHODS:CONSTRUCTOR IMPORTING IM_NAME TYPE  STRING
  7.                                   IM_PLANETYPE TYPE SAPLANE-PLANETYPE
  8.                                   IM_MAXCARGO TYPE  SAPLANE-CAP_UNIT.
  9.     METHODS DISPLAY_ATTRIBUTES REDEFINITION.
  10.   PRIVATE SECTION.
  11.     DATA:MAX_CARGO TYPE SAPLANE-CAP_UNIT.

  12. ENDCLASS.                    "lcl_cargo_plane DEFINITION
  13. *----------------------------------------------------------------------*
  14. *       CLASS LCL_CARGO_PLANE IMPLEMENTATION
  15. *----------------------------------------------------------------------*
  16. *
  17. *----------------------------------------------------------------------*
  18. CLASS LCL_CARGO_PLANE IMPLEMENTATION.
  19.   METHOD CONSTRUCTOR.
  20.     SUPER->CONSTRUCTOR( IM_NAME = IM_NAME IM_PLANETYPE = IM_PLANETYPE ).
  21.     MAX_CARGO = IM_MAXCARGO.
  22.   ENDMETHOD.                    "CONSTRUCTOR
  23.   METHOD DISPLAY_ATTRIBUTES.
  24.     SUPER->DISPLAY_ATTRIBUTES( ).
  25.     WRITE: 'MAXCARGO',MAX_CARGO.
  26.   ENDMETHOD.                    "DISPLAY_ATTRIBUTES
  27. ENDCLASS.                    "LCL_CARGO_PLANE IMPLEMENTATION
复制代码
回复

使用道具 举报

快速回帖

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

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