属性( Attributes) :对象的属性及特征方法( Method ):定义对象的行为
从对象属性和方法是属于类还是属于对象的实例,可以区分为静态属性(static attributes) / 静态方法(static methods),实例属性(instance attributes) / 实例方法(instance methods)
1.静态属性和方法
静态属性
通过 CLASS-DATA 关键字进行声明,通过类名以及 =>
符号进行调用
静态方法
通过 CLASS-METHODS 关键字进行声明,通过类名以及 =>
符号进行调用
静态属性和方法属于类本身,在各个对象实例之间是共享的,通过类名来访问,调用的时候,不需要创建对象的实例
例1
REPORT z437_test_2025.* 静态属性和方法的定义
CLASS lcl_math DEFINITION.PUBLIC SECTION.TYPES: ty_double TYPE p LENGTH 10 DECIMALS 2.CLASS-DATA pi TYPE p LENGTH 10 DECIMALS 7 VALUE '3.1415926'.CLASS-METHODS: pow IMPORTING x TYPE ty_doubley TYPE ty_doubleRETURNING VALUE(pow_value) TYPE ty_double.
ENDCLASS.CLASS lcl_math IMPLEMENTATION.METHOD pow.pow_value = x ** y.ENDMETHOD.
ENDCLASS.* 静态属性和方法的访问
START-OF-SELECTION.DATA: result TYPE p DECIMALS 2.CALL METHOD lcl_math=>powEXPORTINGx = 25y = 3RECEIVINGpow_value = result.* result = lcl_math=>pow( x = 25 y = 3 ).WRITE: / 'pi = ', lcl_math=>pi LEFT-JUSTIFIED,/ '25 ** 3 = ', result LEFT-JUSTIFIED.
输出结果:
在ABAP中,类中定义方法,返回方法的结果值需要使用RETURNING VALUE(xxx)
方法定义 IMPORTING 调用时对应 EXPORTING
方法定义 RETURNING 调用时对应 RECEIVING
2.实例属性和方法
实例属性
实例属性属于对象的实例(object instance),通过DATA关键字进行声明,通过对象变量以及 ->
符号进行调用
实例中的属性是相互独立的
实例方法
实例方法属于对象的实例(object instance),通过METHODS关键字进行声明,通过对象变量以及 ->
符号进行调用
例1
REPORT z437_test_2025.* 实例属性和方法的定义
CLASS lcl_student DEFINITION.PUBLIC SECTION.METHODS: constructor IMPORTING sid TYPE stringname TYPE stringage TYPE int2current_class TYPE string.METHODS: set_age IMPORTING new_age TYPE int2,set_class IMPORTING new_class TYPE string,to_string RETURNING VALUE(rv) TYPE string.PRIVATE SECTION.DATA: sid TYPE string,name TYPE string,age TYPE int2,current_class TYPE string.
ENDCLASS. " lcl_student DEFINITIONCLASS lcl_student IMPLEMENTATION.METHOD constructor.me->sid = sid.me->name = name.me->age = age.me->current_class = current_class.ENDMETHOD. " constructorMETHOD set_age.me->age = new_age.ENDMETHOD. " set_ageMETHOD set_class.me->current_class = new_class.ENDMETHOD. " set_classMETHOD to_string.DATA: result TYPE string.DATA: age_str TYPE string.age_str = me->age.CONCATENATE '<Student: (ID:' me->sid ',Name:' me->name ',Age:' age_str',Class:' me->current_class ')>'INTO result.rv = result.ENDMETHOD.ENDCLASS. " lcl_student IMPLEMENTATION* 实例属性和方法的访问
START-OF-SELECTION.DATA: stu_info TYPE string." 定义引用类型的变量DATA: s1 TYPE REF TO lcl_student." 创建对象的实例" 在本例中,构造函数有4个参数,方法定义时关键字为IMPORTING,调用时对应EXPORTING关键字CREATE OBJECT s1 EXPORTING sid = '001'name = 'Andy'age = 18current_class = '卓越21班'." 调用对象的属性和方法CALL METHOD s1->set_ageEXPORTINGnew_age = 20.* s1->set_age( 20 ).CALL METHOD s1->set_classEXPORTINGnew_class = '卓越A班'.* s1->set_class( '卓越A班' ).stu_info = s1->to_string( ).WRITE: / stu_info.
输出结果:
构造方法(constructor)是一类特殊的方法,在创建对象实例时,构造方法自动运行
例2
REPORT z437_test_2025.CLASS lcl_demo DEFINITION.PUBLIC SECTION." 实例属性DATA: gv_first_name TYPE c LENGTH 100 VALUE 'Instance Class'." 静态属性CLASS-DATA: gv_last_name TYPE c LENGTH 100 VALUE 'Static Class'." 实例方法METHODS: write_instance." 静态方法CLASS-METHODS: write_static.ENDCLASS.CLASS lcl_demo IMPLEMENTATION.METHOD write_instance.WRITE: / '实例属性', gv_first_name.WRITE: / '静态属性', gv_last_name.ULINE.ENDMETHOD.METHOD write_static.WRITE: / '静态方法里的静态属性',gv_last_name.ENDMETHOD.
ENDCLASS.START-OF-SELECTION." 定义变量DATA: lo_f_1 TYPE REF TO lcl_demo,lo_f_2 TYPE REF TO lcl_demo." 实例化CREATE OBJECT lo_f_1.CREATE OBJECT lo_f_2." 实例中的属性是相互独立的lo_f_1->gv_first_name = '1'.lo_f_2->gv_first_name = '2'." 访问实例方法lo_f_1->write_instance( ).lo_f_2->write_instance( ).WRITE: / '访问静态属性', lcl_demo=>gv_last_name.ULINE." 访问静态方法lcl_demo=>write_static( ).
输出结果:
总结
① 静态属性和方法与类相关,实例属性/方法与对象实例相关
② 静态属性和方法通过类名 +
=>
符号进行调用实例属性和方法通过对象变量 +
->
符号进行调用
提示Tips:静态属性和方法不能访问实例属性和方法,实例属性和方法能访问静态属性和方法