zoukankan      html  css  js  c++  java
  • abap objectoriented–使用继承

    引用:翱翔云天

    在这一节中,我们来实现继承。

    背景:有两种飞机,一种是客机,一种是货机。显然他们都属于飞机的一种,所以按照对象抽象,得到父类。对于客机而言,有其特殊的属性即座位的数量,而对于货机,同样有特殊的属性能承载的最大重量。所以,原来父类的显示属性的方法不再适用,我们可以把这个方法定义为抽象方法(c++中的虚函数),也可以保留其共同的实现,在子类中重新定义该方法的实现。

    Uml图如下:

    *----------------------------------------------------------------------*

    * INCLUDE Z_SAMPLE_LCL_AIRPLANE *

    *----------------------------------------------------------------------*

    ******************************************

    * Definition part

    ******************************************

    CLASS lcl_airplane DEFINITION.

    *------------------------------

    * Public section

    *------------------------------

    PUBLIC SECTION.

    TYPES: t_name(25) TYPE c.

    METHODS:

    constructor importing im_name type t_name

    im_planetype TYPE saplane-planetype,

    display_attributes.

    * Static methods

    class-methods:

    display_n_o_airplanes.

    *------------------------------

    * Private section

    *------------------------------

    PRIVATE SECTION.

    * Private attributes

    DATA: name(25) TYPE c,

    planetype TYPE saplane-planetype.

    * Private static attribute

    CLASS-DATA n_o_airplanes TYPE i.

    ENDCLASS.

    ******************************************

    * Implementation part

    ******************************************

    CLASS lcl_airplane IMPLEMENTATION.

    METHOD constructor.

    * Counts number of instances

    n_o_airplanes = n_o_airplanes + 1.

    name = im_name.

    planetype = im_planetype.

    ENDMETHOD.

    METHOD display_attributes.

    WRITE:/ 'Name:', name, 'Planetype:', planetype.

    ENDMETHOD.

    METHOD display_n_o_airplanes.

    WRITE: / 'No. planes:', n_o_airplanes.

    ENDMETHOD.

    ENDCLASS.

    *----------------------------------------------------------------------*

    * INCLUDE Z_SAMPLE_LCL_PA_AIRPLANE *

    *----------------------------------------------------------------------*

    *******************************************************************

    * This is a subclass of class lcl_airplane

    *******************************************************************

    CLASS lcl_passenger_airplane DEFINITION INHERITING FROM lcl_airplane.

    PUBLIC SECTION.

    * The constructor contains the parameters from the superclass

    * plus the parameters from the subclass

    METHODS:

    constructor IMPORTING im_name TYPE t_name

    im_planetype TYPE saplane-planetype

    im_n_o_seats TYPE sflight-seatsmax,

    * Redefinition of superclass method display_attributes

    display_attributes REDEFINITION.

    PRIVATE SECTION.

    DATA: n_o_seats TYPE sflight-seatsmax.

    ENDCLASS.

    CLASS lcl_passenger_airplane IMPLEMENTATION.

    METHOD constructor.

    * The constructor method of the superclass MUST be called withing the

    * construtor

    CALL METHOD super->constructor

    EXPORTING im_name = im_name

    im_planetype = im_planetype.

    n_o_seats = im_n_o_seats.

    ENDMETHOD.

    * The redefined display_attributes method

    METHOD display_attributes.

    CALL METHOD super->display_attributes.

    WRITE: / 'No. seats:', n_o_seats.

    ENDMETHOD.

    ENDCLASS.

    *----------------------------------------------------------------------*

    * INCLUDE Z_SAMPLE_LCL_CA_AIRPLANE *

    *----------------------------------------------------------------------*

    *******************************************************************

    * This is a subclass of class lcl_airplane

    *******************************************************************

    CLASS LCL_CARGO_PLANE DEFINITION INHERITING FROM LCL_AIRPLANE.

    PUBLIC SECTION.

    METHODS:

    * The constructor contains the parameters from the superclass

    * plus the parameters from the subclass

    CONSTRUCTOR IMPORTING IM_NAME TYPE T_NAME

    IM_PLANETYPE TYPE SAPLANE-PLANETYPE

    IM_CARGOMAX TYPE SCPLANE-CARGOMAX,

    * Redefinition of superclass method display_attributes

    DISPLAY_ATTRIBUTES REDEFINITION.

    PRIVATE SECTION.

    DATA:CARGOMAX TYPE SCPLANE-CARGOMAX.

    ENDCLASS.

    *---------------------------------------------------------------------*

    * CLASS lcl_cargo_plane IMPLEMENTATION

    *---------------------------------------------------------------------*

    CLASS LCL_CARGO_PLANE IMPLEMENTATION.

    METHOD CONSTRUCTOR.

    * The constructor method of the superclass MUST be called withing the

    * constructor

    CALL METHOD SUPER->CONSTRUCTOR

    EXPORTING IM_NAME = IM_NAME

    IM_PLANETYPE = IM_PLANETYPE.

    CARGOMAX = IM_CARGOMAX.

    ENDMETHOD.

    METHOD DISPLAY_ATTRIBUTES.

    * The redefined display_attributes method

    CALL METHOD SUPER->DISPLAY_ATTRIBUTES.

    WRITE: / 'Cargo max:', CARGOMAX.

    ENDMETHOD.

    ENDCLASS.

    REPORT ZBOBO_OO_011 .

    * Super class

    Include z_sample_lcl_airplane.

    * Sub classes

    include z_sample_lcl_pa_airplane.

    include z_sample_lcl_ca_airplane.

    DATA:

    * Type ref to sub classes. Note: It is not necesssary to make typeref to

    * the superclass

    o_passenger_airplane TYPE REF TO lcl_passenger_airplane,

    o_cargo_plane TYPE REF TO lcl_cargo_plane.

    START-OF-SELECTION.

    * Display initial number of instances = 0

    CALL METHOD lcl_airplane=>display_n_o_airplanes.

    * Create objects

    CREATE OBJECT o_passenger_airplane

    EXPORTING

    im_name = 'LH505'

    im_planetype = 'Boing 747'

    im_n_o_seats = 350.

    CREATE OBJECT o_cargo_plane

    EXPORTING

    im_name = 'AR13'

    im_planetype = 'DC 3'

    im_cargomax = 35.

    * Display attributes

    CALL METHOD o_passenger_airplane->display_attributes.

    CALL METHOD o_cargo_plane->display_attributes.

    * Call static method display_n_o_airplanes

    * Note: The syntax for calling a superclass method, differs from the

    * syntax when calling a subclass method.

    * When calling a superclass => must be used instead of ->

    CALL METHOD lcl_airplane=>display_n_o_airplanes.

  • 相关阅读:
    进程与线程
    linux网关服务器
    linux硬盘分区和fdisk命令
    MyISAM与InnoDB两者之间区别与选择(转)
    系统吞吐量与QPS/TPS
    linux最大打开文件句柄数
    内存性能测试 Memtester+mbw
    硬盘性能测试
    使用JNA访问WindowsAPI操作Windows窗口元素
    [博客页面装饰]----[人体时钟]插件
  • 原文地址:https://www.cnblogs.com/wequst/p/1513449.html
Copyright © 2011-2022 走看看