ABAP面向对象
1、面向对象基础
一切皆对象,对象的三要素:封装、多态、继承
abap继承只支持单继承
2、类的定义和实现
ABAP定义类方法是分两部分:先定义、后实现, 最后…最后才是调用方法
2.1、类的定义
不同于java等程序,abap类的定义和实现是分开写的,按如下格式
REPORT zcsdn_lion_obj02.
* 类(CLASS)—定义
CLASS my_ftion DEFINITION.
PUBLIC SECTION."公共的,可定义方法、属性
METHODS: show_text.
*METHODS: 方法1,方法2,方法3."多方法的直接用逗号隔开即可
PROTECTED SECTION."保护的,可定义方法、属性
DATA weight TYPE p DECIMALS 2.
PRIVATE SECTION."私有的,可定义方法、属性
DATA text(100) TYPE c VALUE 'ABAP面向对象第一课.'.
ENDCLASS. "application DEFINITION
*类(CLASS)—实现
CLASS my_ftion IMPLEMENTATION.
METHOD show_text.
WRITE text.
ENDMETHOD. "show_text
ENDCLASS. "application DEFINITION
*类内部调用方法:show_text
DATA zs TYPE REF TO my_ftion.
START-OF-SELECTION."此处一定要加此语句,否则会报错:无法执行语句.
CREATE OBJECT zs.
CALL METHOD zs->show_text.
START-OF-SELECTION.的作用,在ALV选择块中做说明
2.2、类的成员
类成员:属性、方法、事件
2.3、类成员的可见性
PUBLIC SECTION——公有: 可被所有对象使用.
PROTECTED SECTION——保护: 只能被本类及其派生类中的方法使用.
PRIVATE SECTION——私有: 只能被类本身的方法所使用.
3、类方法
ABAP定义类方法是分两部分:先定义、后实现,最后才是调用
类方法的定义的种类
Methods meth
IMPORTING...
EXPORTING...
RETURNING...
CHANGING...
Exceptions...
类方法的调用
Call Method [oref->|class=>] meth
Exporting ... i i= f i..."对应定义method中:Importing
Importing... ei = gi..."对应定义method中:Exporting
Changing... ci = ci..."对应定义method中:Changing
Receiving r = h"对应定义method中:RETURNING
Exceptions ...x..."对应定义method中:Exceptions
示例:
1、设置体重=100
2、设置身高=1.74
3、计算以上体重身高的BMI:体重/身高
REPORT zcsdn_lion_obj01.
* 定义my_person类
CLASS my_person DEFINITION.
* 公共属性
PUBLIC SECTION.
*开始定义方法.
METHODS:function01,
setwet IMPORTING value(str2) TYPE p ."需要输入参数的,需在定义方法时说明.
METHODS bmi EXPORTING value(rt) TYPE p.
METHODS showname RETURNING value(str1) TYPE string."方法需要return值的,需要在定义方法时指定
METHODS bmi2 EXPORTING value(rt) TYPE p EXCEPTIONS error.
DATA:name TYPE string VALUE '李四',"姓名.
age TYPE i, "年龄.
sex TYPE i. "性别.
DATA:height TYPE p DECIMALS 2."身高.
* 类似static静态属性
CLASS-DATA:qt TYPE i."数量.
*保护属性
PROTECTED SECTION.
*私有属性
PRIVATE SECTION.
DATA:wgt TYPE p DECIMALS 2."体重.
ENDCLASS. "person
*---- CLASS person IMPLEMENTATION -----------*
CLASS my_person IMPLEMENTATION.
*实现方法:function01
METHOD function01.
qt = qt + 23.
ENDMETHOD. "function01
*实现方法:showname,带返回值功能
METHOD showname.
*str1 = '姓名=' + name.
CONCATENATE '姓名:' name INTO str1.
ENDMETHOD. "showname
*实现方法:setwet,带赋值功能
METHOD setwet.
wgt = str2.
ENDMETHOD. "setwet
*方法需要另行计算的
METHOD bmi.
rt = wgt / height .
ENDMETHOD.