sap-面向对象之类

1概念
总的来说,类由属性和方法组成,在ABAP中增加了事件
类有三个访问权限 public(全局访问) protected(本类和有继承关系的) private(只允许本类)
属性有两种 静态变量和实例变量 分别定义为 class-data  data
方法也有两种 静态方法和实例方法  分别定义为 class-methods  methods
总的来说,类由属性和方法组成,在ABAP中增加了事件
类有三个访问权限 public(全局访问) protected(本类和有继承关系的) private(只允许本类)
属性有两种 静态变量和实例变量 分别定义为 class-data  data
方法也有两种 静态方法和实例方法  分别定义为 class-methods  methods
事件也有两种 静态事件和实例事件   分别是 class-events  events
class MyClass definition.
public section.
  methods:add
        IMPORTING a TYPE i
                  b TYPE i
        EXPORTING c TYPE i.
  class-methods:hello.
  EVENTS events1 EXPORTING VALUE(p_data) TYPE i.
protected section.
     data name type c.
     class-data password type c.
private section.
endclass.
2.类的继承和实现接口
interface play1.
   method:study.
endinterface.

interface play.
   methods:test1.
   interfaces:study.     "接口的实现"
endinterface.

class person definition.
  methods:test2.
  interfaces:play.      "接口的实现"
endclass.

class student definition inheriting from person.   "类的继承"
public section.
   method:hello,test2 redefinition.
endclass.

class student implementation.
  method play~test1.      "接口中的方法引用方式  ~ "

  endmethod.
  
  method play1~study.      "子接口的方法"
  
  endmethod.
  
  method test2.           "父类中的方法,方法的重写"
  
  endmethod.
  
  method hello.
  
  endmethod.
endclass.

3.示例代码

CLASS class4 DEFINITION ABSTRACT.
  PUBLIC SECTION.
    "定义抽象方法
    METHODS:play ABSTRACT.
ENDCLASS.

"子接口的定义
INTERFACE inter1.
  METHODS:test4.
ENDINTERFACE.

"接口的定义
INTERFACE inter.
  METHODS:test1 IMPORTING VALUE(lv_num1)  TYPE i DEFAULT 3
                          VALUE(lv_num2)  TYPE i DEFAULT 9
                EXPORTING VALUE(lv_total) TYPE i.
  "实现接口 可以多实现
  INTERFACES:inter1.
ENDINTERFACE.

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

"父类的定义
CLASS class1  DEFINITION.
  PUBLIC SECTION.
    "定义了实例构造器方法  静态构造器定义为  class-methods class_constructor 构造器一般用来初始化,可以有传入参数,和JAVA差不多
    METHODS:test2,constructor.

    "接口的实现
    INTERFACES:inter.
ENDCLASS.

"父类的实现
CLASS class1 IMPLEMENTATION.
  METHOD:constructor.
    WRITE:/ '父类构造器'.
  ENDMETHOD.

  METHOD:test2.
    WRITE:/ 'test2测试'.
  ENDMETHOD.

  "接口方法的实现 实现一个加法 接口方法的调用为 接口名~接口方法
  METHOD:inter~test1.
    lv_total = lv_num1 + lv_num2.
    WRITE:/ lv_total.
  ENDMETHOD.

  METHOD:inter1~test4.
    WRITE:/ '子接口的实现'.
  ENDMETHOD.
ENDCLASS.

******************************************************************************
"子类的定义
CLASS class2 DEFINITION INHERITING FROM class1.
  PUBLIC SECTION.
    "静态变量的定义
    CLASS-DATA:name TYPE string VALUE 'hello world'.

    METHODS:execute,constructor.

    "类的重写
    METHODS test2 REDEFINITION.

    "事件的定义 使用场景是:在一个类的方法中要调用另外一个类的方法,两个类并无关联 
    "事件可以有参数接口,但只有输出参数。输出参数由接收它们作为输入参数的 RAISE EVENT 语句传递给事件处理程序方法。
    EVENTS events1 EXPORTING VALUE(p_data) TYPE i.
   

  PRIVATE SECTION.
    DATA:lv_num TYPE i.
ENDCLASS.

"子类的实现  输出10的整数倍
CLASS class2 IMPLEMENTATION.
  METHOD:execute.
    DATA:gv_data TYPE i.
    lv_num = lv_num + 1.
    gv_data = lv_num MOD 10.
    IF gv_data = 0.
      "满足条件时调用事件,即事件的触发条件
      RAISE EVENT events1 EXPORTING p_data = lv_num.
    ENDIF.
  ENDMETHOD.

  "构造器的实现
  METHOD:constructor.
    CALL METHOD super->constructor.
    WRITE:/ '子类构造器'.
  ENDMETHOD.

  METHOD:test2.
    "abap中只有重写,没有重载
   write: / '类方法的重写'.
  ENDMETHOD.
ENDCLASS.

********************************************************************************
"事件类的定义
CLASS class3 DEFINITION.
  PUBLIC SECTION.
    "事件方法的定义
    METHODS:imply FOR EVENT events1 OF class2 IMPORTING p_data.
ENDCLASS.

"事件类的实现
CLASS class3 IMPLEMENTATION.
  METHOD:imply.
    WRITE:/ p_data.
  ENDMETHOD.
ENDCLASS.

"对象的定义
DATA:class1 TYPE REF TO class1,
     class2 TYPE REF TO class2,
     class3 TYPE REF TO class3.

START-OF-SELECTION.
  "对象的创建 调用构造器
  CREATE OBJECT:class1,class2,class3.
  "注册事件处理方法
  SET HANDLER class3->imply FOR class2.

  DO 50 TIMES.
    CALL METHOD class2->execute.
  ENDDO.
  SKIP 2.
  "接口方法的调用
  CALL METHOD class1->inter~test1.

  CALL METHOD class2->inter~test1.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值