李顾问讲的面向对象

*&---------------------------------------------------------------------*
*& Report Z_TEST1_CLASSLI
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z_TEST1_CLASSLI.
**********************************************************************
*REPORT DESCRIBE:李顾问讲的面向对象
*DEVELOPER:SALAH
*DEVELOP DATE:20191020
*MODIFY DATE:
*FUNCTION SPEC:
*KEY USER:
**********************************************************************
CLASS CL1 DEFINITION.
  PUBLIC SECTION.
    CLASS-DATA TYPE I.""第一个应用变量改变静态变量的之后,第二个应用变量调用静态变量时,使用的仍是它改变后的值。
*    DATA I TYPE I.
    METHODS:M1.
    METHODS:M2.
  PRIVATE SECTION.
    DATA J TYPE VALUE 2.
ENDCLASS.
CLASS CL1 IMPLEMENTATION.
  METHOD M1 .
    DO J TIMES.
      ADD TO I.
      WRITE :/ I.
    ENDDO.
  ENDMETHOD.
  METHOD M2.
    WRITE:'FIRST'.
  ENDMETHOD.
ENDCLASS.
DATA ZCL1 TYPE REF TO CL1.
DATA ZCL11 TYPE REF TO CL1.

START-OF-SELECTION.
  CREATE OBJECT ZCL1.
  CALL METHOD ZCL1->M1.
  CALL METHOD ZCL1->M2.
*CREATE OBJECT ZCL11.
*CALL METHOD ZCL11->M1.
*CALL METHOD ZCL11->M2.

  WRITE CL1=>I."只能调用静态变量

CLASS CL2 DEFINITION.
  PUBLIC SECTION .
    METHODS:M1 IMPORTING I        TYPE I
               RETURNING VALUE(JTYPE I.
ENDCLASS.
CLASS CL2 IMPLEMENTATION.
  METHOD M1.
    J I ** 2.
  ENDMETHOD.
ENDCLASS.
DATA GV_INT TYPE I.
DATA ZCL2 TYPE REF TO  CL2.

START-OF-SELECTION.
  CREATE OBJECT ZCL2 .
  GV_INT = ZCL2->M1).
  WRITE:/ GV_INT.
CLASS CL3 DEFINITION.
  PUBLIC SECTION.
  DATA TE TYPE I.
  METHODS:CONSTRUCTOR."构造方法:一般可以对属性的值进行修改
  METHODS:OUT.
  ENDCLASS.
  CLASS CL3 IMPLEMENTATION.
    METHOD CONSTRUCTOR .
      TE 100.
      ENDMETHOD.
      METHOD OUT.
        WRITE:SY-ULINE.
        WRITE :TE.
        ENDMETHOD.
        ENDCLASS.
        DATA ZCL3 TYPE REF TO CL3.
        START-OF-SELECTION.
        CREATE OBJECT ZCL3.
        CALL METHOD ZCL3->OUT.
CLASS CL4 DEFINITION INHERITING FROM OBJECT.
  PUBLIC SECTION.
    DATA: PUB  TYPE VALUE 'X'..
    METHODS ME_PUB.
  PROTECTED SECTION.
    DATA: PRO TYPE VALUE 1.
  PRIVATE SECTION.
    DATA: PRI TYPE STRING VALUE 'ABCD'.
ENDCLASS.
CLASS CL4 IMPLEMENTATION.
  METHOD ME_PUB.

      CASE PRO.
        WHEN 1.
          WRITE PUB.
        WHEN 2.
          WRITE PRI.
       ENDCASE.


    ENDMETHOD.
  ENDCLASS.
CLASS CL5 DEFINITION INHERITING FROM CL4.
    PUBLIC  SECTION.
      METHODS: ME_PUB REDEFINITION"继承类重载基类中的方法ME_PUB。
      METHODS: ME5.
  ENDCLASS.

  CLASS CL5 IMPLEMENTATION."重载基类的实施
    METHOD ME_PUB.

      CASE PRO.
        WHEN 1.
          WRITE PUB.
        WHEN 2.
          WRITE 'no'.
       ENDCASE.
       CALL METHOD SUPER->ME_PUB."在方法重载中,如果派生类需要继续使用基类中的方法,则可以使用SUPER关键字来指定其基类
    ENDMETHOD.
    METHOD ME5.
      PRO = PRO + 1.
      CALL METHOD ME->ME_PUB.

   ENDMETHOD.
 ENDCLASS.
*  CLASS CL5 IMPLEMENTATION."不同的类的继承实施
*    METHOD ME5.
*      PRO = PRO + 1.
*      CALL METHOD ME->ME_PUB.
*
*   ENDMETHOD.
* ENDCLASS.

 DATA: ZCL5 TYPE REF TO CL5.

 START-OF-SELECTION.
 CREATE OBJECT ZCL5.
 CALL METHOD ZCL5->ME_PUB."第一个 X (重载后) 及 第二个 X (基类中的ME_PUB )
 CALL METHOD ZCL5->ME5." 答案中的 NO (重载后)  答案中ABCD (基类中的ME_PUB )

 CLASS CL6 DEFINITION  ABSTRACT FINAL."抽象类不能创建类对象,其主要目的是做派生类的模板,实际使用的对象由其派生类创建
   PUBLIC SECTION.                "如果加有FINAL 的话,则为最终类,不能被继承。
     DATATYPE I.
     METHODS: ME6.
   PROTECTED SECTION.
     DATA: J TYPE I.
   PRIVATE SECTION.
     DATA: K TYPE I.
ENDCLASS.

CLASS CL6 IMPLEMENTATION.
  METHOD ME6.
    I  1.
    ADD TO J.
    ADD TO K.
     I * J + K.
     WRITE: / SY-ULINE,
            / I.
  ENDMETHOD.
ENDCLASS.

*CLASS CL7 DEFINITION INHERITING FROM CL6.
*ENDCLASS.

*DATA: ZCL6 TYPE REF TO CL7..
*START-OF-SELECTION.
*CREATE OBJECT ZCL6.
*CALL METHOD ZCL6->ME6.
INTERFACE ZINT"接口
   DATA: INT1  TYPE I.
   DATA: INT2 TYPE I.
   METHODS: AB.
 ENDINTERFACE.

 CLASS CL8 DEFINITION.
   PUBLIC SECTION.
     INTERFACES: ZINT.
     METHODSWRITE.
 ENDCLASS.

 CLASS CL8 IMPLEMENTATION.
   METHOD ZINT~AB.
      ZINT~INT1 = ZINT~INT2 + 1.
      ZINT~INT2 = ZINT~INT1 + 2.
   ENDMETHOD.
   METHOD WRITE.
     WRITE:/ ZINT~INT1, ZINT~INT2.
   ENDMETHOD.
 ENDCLASS.

 DATA: ZCL8 TYPE REF TO CL8.
START-OF-SELECTION.
  CREATE OBJECT ZCL8.
  CALL METHOD ZCL8->ZINT~AB.
  CALL METHOD ZCL8->WRITE.

  CLASS CL9 DEFINITION"事件
  PUBLIC SECTION.
    EVENTS: ZEV.
    METHODS: ME.
ENDCLASS.
CLASS CL9 IMPLEMENTATION.
  METHOD ME.
    RAISE EVENT ZEV.
  ENDMETHOD.
ENDCLASS.

CLASS CL10 DEFINITION.
  PUBLIC SECTION.
  METHODS: ME10 FOR EVENT ZEV OF CL9.
ENDCLASS.
CLASS CL10 IMPLEMENTATION.
  METHOD ME10.
    WRITE: /  'This is a event!'.
  ENDMETHOD.
ENDCLASS.
CLASS CL11 DEFINITION.
  PUBLIC SECTION.
    METHODS ME11 FOR EVENT ZEV OF CL9.
ENDCLASS.
CLASS CL11 IMPLEMENTATION.
  METHOD ME11.
    WRITE:  / 'CLASS CL11' .
  ENDMETHOD.
ENDCLASS.

DATA: ZCL9 TYPE REF TO CL9,
      ZCL10 TYPE REF TO CL10,
      ZCL12 TYPE REF TO CL11.
START-OF-SELECTION.
 CREATE OBJECT: ZCL9, ZCL10,ZCL12.

  SET HANDLER ZCL12->ME11 FOR ZCL9.
 SET HANDLER ZCL10->ME10 FOR ZCL9.
 CALL METHOD ZCL9->ME.

猜你喜欢

转载自www.cnblogs.com/salah/p/11917289.html
今日推荐