技术开发 频道

ABAP Object-Oriented——使用继承

【IT168 技术文章】

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

    背景:有两种飞机,一种是客机,一种是货机。显然他们都属于飞机的一种,所以按照对象抽象,得到父类。对于客机而言,有其特殊的属性即座位的数量,而对于货机,同样有特殊的属性能承载的最大重量。所以,原来父类的显示属性的方法不再适用,我们可以把这个方法定义为抽象方法(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.
0
相关文章