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.
版权声明:本文为qq_45625290原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。