[SAP ABAP] 面向对象程序设计-类的访问区域

类在DEFINITION定义的过程有一个分区的概念,就是类中所定义的属性、方法等都必须定义在某个区域中

类的访问区域分为以下3种

PUBLICPROTECTEDPRIVATE
内部是否可见
外部是否可见XX
继承是否可见X

类的访问区域

PUBLIC SECTION 公有部分可以直接被(自己/子类/外界)访问
PROTECTED SECTION 保护部分可以被(自己/子类)访问
PRIVATE SECTION 私有部分不能被其他类访问,只可以被自己访问

提示Tips:在声明部分,PUBLIC SECTION 必须在 PRIVATE SECTION 前面

例1

REPORT z437_test_2025.

* 父类
CLASS lcl_c1 DEFINITION.
  PROTECTED SECTION.   " 若此处是private访问修饰符,将不能被lcl_c2继承,会报错
    DATA: lv_num TYPE i.
ENDCLASS.

* 子类
CLASS lcl_c2 DEFINITION INHERITING FROM lcl_c1. " lcl_c2 继承 lcl_c1
  PUBLIC SECTION.
    METHODS: set_data IMPORTING p_imp TYPE i,
             get_data EXPORTING p_exp TYPE i.
ENDCLASS.

CLASS lcl_c2 IMPLEMENTATION.
  METHOD set_data.
    lv_num = p_imp.
  ENDMETHOD.

  METHOD get_data.
    p_exp = lv_num + 1.
  ENDMETHOD.
ENDCLASS.


START-OF-SELECTION.
  " 定义变量
  DATA: go_cref TYPE REF TO lcl_c2.
  DATA: gv_data TYPE i.

  " 创建实例
  CREATE OBJECT go_cref.

  CALL METHOD go_cref->set_data
    EXPORTING
      p_imp = '10'.

  CALL METHOD go_cref->get_data
    IMPORTING
      p_exp = gv_data.

  WRITE: / gv_data.

输出结果:

如果将父类lcl_c1 DEFINITION区域中的PROTECTED SECTION更改为PRIVATE SECTION,将不能被lcl_c2继承,程序会报错

例2

REPORT z437_test_2025.

CLASS lcl_c1 DEFINITION.
  PUBLIC SECTION.
    METHODS: set_data IMPORTING p_imp TYPE i,
             get_data EXPORTING p_exp TYPE i.

*  PROTECTED SECTION.        ” 删掉注释会报错
    DATA: lv_num TYPE i.
ENDCLASS.

CLASS lcl_c1 IMPLEMENTATION.
  METHOD set_data.
    lv_num = p_imp.
  ENDMETHOD.

  METHOD get_data.
    p_exp = lv_num + 1.
  ENDMETHOD.
ENDCLASS.


START-OF-SELECTION.
  " 定义变量
  DATA: go_cref TYPE REF TO lcl_c1.
  DATA: gv_data TYPE i.

  " 创建实例
  CREATE OBJECT go_cref.

  CALL METHOD go_cref->set_data
    EXPORTING
      p_imp = '10'.

  WRITE: 'Set_data method:',go_cref->lv_num.

  CALL METHOD go_cref->get_data
    IMPORTING
      p_exp = gv_data.

  WRITE: / 'get_data method:', gv_data.

输出结果:

如果将上述lcl_c1 DEFINITION区域中的PRIVATE SECTION的注释打开,程序会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值