BC401 - ABAP Objects 快速参考
ABAP Objects 快速参考
#dashboard #abap-objects
类定义 → 类属性与方法
| 语法 | 说明 |
|---|---|
CLASS <name> DEFINITION. … ENDCLASS. |
类定义部分 |
CLASS <name> IMPLEMENTATION. … ENDCLASS. |
类实现部分 |
PUBLIC SECTION. |
公有可见性 |
PROTECTED SECTION. |
受保护可见性 |
PRIVATE SECTION. |
私有可见性 |
属性类型 → 类属性与方法
| 语法 | 类型 | 说明 |
|---|---|---|
DATA: attr TYPE type. |
实例属性 | 每个对象独立 |
CLASS-DATA: attr TYPE type. |
静态属性 | 所有对象共享 |
CONSTANTS: c TYPE type VALUE val. |
常量 | 不可变 |
DATA attr TYPE type READ-ONLY. |
只读属性 | 仅在PUBLIC SECTION中有效 |
方法定义 → 构造器与方法调用
| 语法 | 说明 |
|---|---|
METHODS: meth IMPORTING ... EXPORTING ... CHANGING ... RETURNING ... RAISING ... |
实例方法 |
CLASS-METHODS: meth ... |
静态方法 |
CALL METHOD ref->meth. |
显式方法调用 |
ref->meth( ). |
简写调用 |
ref->meth( EXPORTING i = v ). |
带参数调用 |
DATA(result) = ref->func_meth( ). |
函数式方法调用 |
对象创建与删除 → 对象与引用
| 语法 | 说明 |
|---|---|
DATA: ref TYPE REF TO <class>. |
声明引用变量 |
CREATE OBJECT ref. |
实例化对象 |
ref->attr |
通过引用访问属性 |
ref->meth( ). |
通过引用调用方法 |
构造器 → 构造器与方法调用
| 类型 | 语法 | 说明 |
|---|---|---|
| 实例构造器 | METHODS: constructor IMPORTING ... |
每个类只有一个 |
| 静态构造器 | CLASS-METHODS: class_constructor. |
自动调用,无参数 |
继承 → 继承基础
| 语法 | 说明 |
|---|---|
CLASS subclass DEFINITION INHERITING FROM superclass. |
定义继承关系 |
METHODS: meth REDEFINITION. |
重定义方法 |
super->meth( ). |
调用父类方法 |
me->attr |
自引用 |
类型转换 → 类型转换与多态
| 类型 | 语法 | 说明 |
|---|---|---|
| Up-cast ( widening ) | ref_super = ref_sub. |
隐式,总是安全 |
| Down-cast ( narrowing ) | ref_sub ?= ref_super. |
显式,可能运行时错误 |
| Down-cast (安全) | ref_sub = CAST #(<class>( ref_super )). |
使用CAST操作符 |
接口 → 接口定义与实现
| 语法 | 说明 |
|---|---|
INTERFACE <name>. … ENDINTERFACE. |
定义接口 |
INTERFACES <name>. (在PUBLIC SECTION中) |
实现接口 |
ref->intf~meth( ). |
通过接口解析操作符访问 |
ALIASES alias FOR intf~meth. |
定义别名 |
事件 → ABAP事件
| 语法 | 说明 |
|---|---|
EVENTS: evt EXPORTING VALUE(e) TYPE t. |
定义实例事件 |
CLASS-EVENTS: evt ... |
定义静态事件 |
RAISE EVENT evt EXPORTING e = val. |
触发事件 |
METHODS: handler FOR EVENT evt OF class IMPORTING e. |
定义事件处理器 |
SET HANDLER ref->handler FOR ref_trigger. |
注册事件处理 |
SET HANDLER ref->handler FOR ALL INSTANCES. |
注册到所有实例 |
异常处理 → 异常处理概念
| 语法 | 说明 |
|---|---|
RAISE EXCEPTION TYPE cx_class EXPORTING ... |
抛出异常 |
TRY. ... CATCH cx_class INTO ref. ... ENDTRY. |
捕获异常 |
CLEANUP. ... |
清理块 |
ref->get_text( ). |
获取异常文本 |
异常类层次 → 异常处理概念
1 | CX_ROOT |
RTTS → 运行时类型服务
| 类 | 用途 |
|---|---|
CL_ABAP_TYPEDESCR |
根描述类 |
CL_ABAP_STRUCTDESCR |
结构类型描述 |
CL_ABAP_CLASSDESCR |
类类型描述 |
cl_abap_typedescr=>describe_by_data( data ) |
获取数据类型描述 |
cl_abap_typedescr=>describe_by_object_ref( ref ) |
获取对象类型描述 |
关键公式/模式
| 模式 | 公式/规则 |
|---|---|
| 实例属性 vs 静态属性 → 类属性与方法 | DATA = 每实例, CLASS-DATA = 每类 |
| Up-cast 规则 → 类型转换与多态 | 子类引用 → 父类引用,隐式安全 |
| Down-cast 规则 → 类型转换与多态 | 父类引用 → 子类引用,需要 ?= |
| 构造器继承 → 继承基础 | 构造器不被继承,子类必须调用 super->constructor( ) |
| 事件参数 → ABAP事件 | 事件只能有 EXPORTING 参数(值传递) |
| 异常传播 → 异常处理进阶 | 方法签名中 RAISING 声明可传播的异常 |