SAP ABAP OO ALV 类的初相识

*&---------------------------------------------------------------------*
*& Report Z_OO
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_oo.

"声明类  定义类中的项目
CLASS lcl_compt DEFINITION .

  PUBLIC SECTION .   "公有的部分
    TYPES gty_char20  TYPE c LENGTH 20 .
    TYPES gty_char5  TYPE c LENGTH 5 .
    "实例属性
    DATA gv_char TYPE c LENGTH 20 VALUE 'CHAR变量'.
    "静态属性
    CLASS-DATA gv_change TYPE gty_char20 .  "静态属性
    CLASS-DATA gv_CONCATENATE TYPE gty_char20 .  "静态属性
    CLASS-DATA gv_static TYPE c LENGTH 20 VALUE '静态属性'.

    "实例方法
    METHODS write_char .
    METHODS write_instance .

    METHODS set_value IMPORTING i_value TYPE gty_char20.   "对gv_change变量赋值
    METHODS get_value EXPORTING e_value TYPE gty_char20.   "获取gv_change变量值

    METHODS con_value IMPORTING  i_value1  TYPE gty_char5 OPTIONAL    "加 OPTIONAL 变成可选项
                                 i_value2  TYPE gty_char5
                                 i_value3  TYPE gty_char5
                      EXPORTING  e_result  TYPE gty_char5
                                 e_message TYPE gty_char20    "多个参数
                      EXCEPTIONS no_zero .

    METHODS ret_value IMPORTING i_value1       TYPE gty_char5 OPTIONAL    "
                                i_value2       TYPE gty_char5
                                i_value3       TYPE gty_char5
                      RETURNING VALUE(e_subrc) TYPE gty_char20 .



    "静态方法
    CLASS-METHODS write_static .

  PROTECTED SECTION .  "受保护的部分
    CLASS-DATA gv_super TYPE  c LENGTH 20 VALUE 'PROTECTED SECTION'.

  PRIVATE SECTION .    "私有的部分
* CLASS-DATA gv_static TYPE c LENGTH 20 VALUE '静态属性'.


ENDCLASS .

"实现类   定义类中的方法的内容
CLASS lcl_compt IMPLEMENTATION .

  METHOD write_char .  "实例方法
    WRITE :/'实例方法:', gv_char .
  ENDMETHOD .

  METHOD write_static .    "静态方法
    WRITE :/'静态方法:', gv_static .
  ENDMETHOD .

  METHOD write_instance .  "实例方法
    WRITE :/'实例方法调静态属性:', gv_static .
  ENDMETHOD .

  "实例之间值是相互独立的,所以 静态方法不能调实例属性

  METHOD set_value .
    gv_change = i_value .
  ENDMETHOD .

  METHOD get_value .
    e_value =  gv_change .
  ENDMETHOD .

  METHOD con_value .
    CONCATENATE i_value1 i_value2 i_value3 INTO gv_CONCATENATE .
    e_message = gv_CONCATENATE .
    IF sy-subrc = 0.
      e_result = 'S' .
    ELSE .
      e_result = 'E' .
    ENDIF.
    IF i_value1 IS INITIAL.
      RAISE no_zero .
    ENDIF.
  ENDMETHOD .

  METHOD ret_value .
    CONCATENATE i_value1 i_value2 i_value3 INTO gv_CONCATENATE .
    IF sy-subrc = 0.
      e_subrc = 'S : ' && gv_CONCATENATE.
    ELSE .
      e_subrc = 'E' .
    ENDIF.
  ENDMETHOD .

ENDCLASS .

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

"声明一个对象
DATA lcl_object TYPE REF TO lcl_compt .
DATA lcl_object_2 TYPE REF TO lcl_compt .

START-OF-SELECTION .

  CREATE OBJECT lcl_object.  "实例化
  CREATE OBJECT lcl_object_2.  "实例化

*实例属性,在不同的实例之间独立   "值存在实例(与 lcl_object_2 互相独立)

  WRITE: /'访问实例属性:' ,lcl_object->gv_char .  "访问实例属性

*  lcl_object->gv_char = '更换CHAR的值' .
  CALL METHOD lcl_object->write_char.             "实例1 的值
  CALL METHOD lcl_object_2->write_char.           "实例2 的值

* 静态属性不依附于实例   ”值存在类里
  WRITE:/ '静态属性:' ,lcl_compt=>gv_static .    "访问静态属性
*  lcl_compt=>gv_static = '更改静态属性' .
  CALL METHOD lcl_compt=>write_static.            "静态方法

  CALL METHOD lcl_object->write_instance.          "实例方法调静态属性
  CALL METHOD lcl_object_2->write_instance.           "实例2 的值

*------------------调用单个参数传输---------------------------------------------------
  DATA gv_data TYPE lcl_object->gty_char20 .
  "带有参数的方法的调用
  CALL METHOD lcl_object->set_value
    EXPORTING
      i_value = '赋值CHAR变量'.

  CALL METHOD lcl_object->get_value
    IMPORTING
      e_value = gv_data.

  WRITE: / gv_data .
*--------------------调用多个参数传输-------------------------------------------------
  DATA gv_subrc TYPE lcl_object->gty_char5 .
  DATA gv_message TYPE lcl_object->gty_char20 .
  CALL METHOD lcl_object->con_value
    EXPORTING
*     i_value1  = 'ab'
      i_value2  = 'cd'
      i_value3  = 'ef'
    IMPORTING
      e_result  = gv_subrc
      e_message = gv_message
    EXCEPTIONS
      no_zero   = 1.

  IF sy-subrc = 1.
    WRITE: / '不能为0' .
  ELSE.
    WRITE: / gv_subrc , '' ,gv_message.
  ENDIF.


*--------------method 中的参数 (exporting 和 returning 的区别)------------------------------------------------------------------
*  CALL METHOD lcl_object->ret_value
*    EXPORTING
*      i_value1 = '12'
*      i_value2 = '34'
*      i_value3 = '56'
*    RECEIVING
*      e_subrc  = gv_message.

  "  returning 的简便写法
  gv_message = lcl_object->ret_value( i_value1 = '12'
                                      i_value2 = '34'
                                      i_value3 = '56') .

  WRITE: / gv_message.

*====================================================================
  "继承类
CLASS lcl_sub DEFINITION INHERITING FROM lcl_compt.

  PUBLIC SECTION.
    METHODS write_super  .

ENDCLASS .

CLASS lcl_sub IMPLEMENTATION .

  METHOD write_super  .
    WRITE:/'PUBLIC:', gv_char .     "共有部分的属性
    WRITE:/'PROTECTED:', gv_super .     "受保护部分的属性
*    WRITE:/'PRIVATE:', gv_static .     "私有部分的属性         错误
  ENDMETHOD .

ENDCLASS .

DATA lcl_object_sub TYPE REF TO lcl_sub .

START-OF-SELECTION .

  CREATE OBJECT lcl_object_sub.  "实例化

  CALL METHOD lcl_object_sub->write_super.
*===================================================================

CLASS lcl_compt2 DEFINITION .

  PUBLIC SECTION .

    TYPES gty_char30 TYPE c LENGTH 30 .

    "构造器方法
    METHODS constructor IMPORTING i_char TYPE gty_char30 .

  PROTECTED SECTION .

  PRIVATE SECTION .

ENDCLASS .

CLASS lcl_compt2 IMPLEMENTATION .

  METHOD constructor .
    WRITE :/ '执行了构造器函数:' .
    WRITE : / i_char .
  ENDMETHOD .

ENDCLASS .

"声明一个对象
DATA lcl_object2 TYPE REF TO lcl_compt2 .
DATA lcl_object3 TYPE REF TO lcl_compt2 .

START-OF-SELECTION .

  "实例化的同时执行了构造器函数
*  CREATE OBJECT lcl_object2.  "实例化
  CREATE OBJECT lcl_object2  "实例化
    EXPORTING
      i_char = '实例1'.

  CREATE OBJECT lcl_object3  "实例化
    EXPORTING
      i_char = '实例2'.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值