ABAP 语言中,类的属性可以从两个角度来看:
-
从属性的可见性角度,属性可分为 public, protected 和 private。因为 ABAP 的类自身分为两种,
-
局部类只能在某支程序中定义和使用,也只能在某支程序内可见。这些属性在程序之外是不可见的。
-
全局类(SE24 定义)在外部是可见的,public, protected 和 private才有意义。
-
在全局类中定义的 public 属性,在外部是可见的
-
全局类中定义的 protected 属性,只能在类本身、子类和友元类可见
-
全局类中定义的 private 属性,只能在类本身可见;
-
-
实例属性 (instance attribute) 和 静态属性 (static attribute)。
-
实例属性:使用 DATA 关键字来声明,在每个对象中独立存在;
-
静态属性:使用 CLASS-DATA 关键字声明,在各个对象之间共享。简单地说,静态属性与类相关,实例属性与对象相关。
-
在调用类和对象的属性和方法的时候,如果是静态属性或方法,用 => 符号,如果是实例属性或方法,用 -> 符号。
-
CALL METHOD: obj->showdata1, " 通过对象调用类方法
obj->(methname)." 通过变量,动态调用类方法
CALL METHOD: callobj2=>call_static_class, " 通过类调用静态类方法
obj2->call_static_class. " 通过对象调用静态方法
类方法通过定义变量来调用方法:

DATA lv_impclass TYPE REF TO object.
READ TABLE it_zcmt_int_po_cfg
INTO it_zcmt_int_po_cfg
INDEX 1.
CREATE OBJECT lv_impclass
TYPE (it_zcmt_int_po_cfg-impclass).
TRY .
DATA(ptab
) =
VALUE abap_parmbind_tab(
( name = 'OUTPUT' kind = cl_abap_objectdescr=>exporting value =
REF #( output ) )
( name = 'INPUT' kind = cl_abap_objectdescr=>importing value =
REF #( input ) )
).
CALL METHOD lv_impclass->(it_zcmt_int_po_cfg-method)
PARAMETER-TABLE ptab.
CATCH cx_ai_system_fault
INTO DATA(oref).
cv_msg = oref->get_text( ).
cv_m_type = c_fail.
ENDTRY.
创建静态类--静态属性用于赋值

调用赋值
ZCL_MM_COBL=>KOSTL = lv_KOSTL.
SET/GET用法:
CL_CRM_BOL_ENTITY->get_related_entity(
EXPORTING
iv_relation_name = lv_rel
RECEIVING
rv_result = lr_entity ).

CL_CRM_
BOL_ENTITY->SET_PROPERTY( IV_ATTR_NAME = 'DESCRIPTION'
IV_VALUE = 'Test*' ).

类在ABAP程序中的使用;
1.声明类开定义类的使用方法。
2.data type ref to ()
3. create object
4. -> =>运算符号类对象或组件;
DEMO:
REPORT zjgltest01.
" 创建类一
CLASS callobj DEFINITION.
PUBLIC SECTION. " 定义公共类成员
CLASS-DATA:para(30) TYPE c VALUE 'The static class parameter!'. " 定义静态变量
DATA count TYPE i. " 定义该类中的全局变量
METHODS : showdata1,
showdata2.
PRIVATE SECTION. "定义类中私有成员.
METHODS:showdata3.
ENDCLASS.
" 定义类方法实现行为
CLASS callobj IMPLEMENTATION.
METHOD showdata1.
WRITE:'HELLO SAP'.
ENDMETHOD.
METHOD showdata2.
count = 1.
WRITE:count.
CALL METHOD showdata3. " 在类内啊调用私有方法
ENDMETHOD.
METHOD showdata3.
WRITE:/'The Private Method!'.
ENDMETHOD.
ENDCLASS.
" 定义第二个类,其成员对象为一静态方法
CLASS callobj2 DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:call_static_class.
ENDCLASS.
" 定义第二个类方法
CLASS callobj2 IMPLEMENTATION. " 直接引用其它类中的静态变量
METHOD call_static_class.
WRITE:/ callobj=>para.
ENDMETHOD.
ENDCLASS.
" 主程序
DATA obj TYPE REF TO callobj. " 引用参照类声明变量
DATA : methname TYPE string. " 定义方法名变量
START-OF-SELECTION.
CREATE OBJECT obj. " 创建类实例化对象
methname = 'SHOWDATA2' . " 为变量赋值方法名
CALL METHOD : obj->showdata1, " 调用类方法
OBJ->(methname). " 通过变量调用类方法
CALL METHOD:callobj2=>call_static_class." 无需实例化
方法声明关键字:METHOD 或 CLASSS-METHOD.
方法实现代码: METHOD…ENDMETHOD.
1.import/Export:输入,输出接口,其接口参数可以为单个变量,Structure,要么内表 .
2.Changing:可同时作为输入,输入接口,其参数与上面一样。
3.RETURNING:返回类传递数值()。
4.EXCEPTIONS:返回执行中所有出现的错误。