![](https://img.haomeiwen.com/i2445987/9aa4a5e0d8ab595a.png)
翱翔云天的SAP 技术网校
程序源代码
Employee
*选择数据
CLASS zcl_c5u2_employee DEFINITION
PUBLIC
ABSTRACT
CREATE PUBLIC .
PUBLIC SECTION.
METHODS:
* 构造器方法
constructor IMPORTING firstname TYPE string
lastname TYPE string,
* 取得全名
get_printname RETURNING VALUE(fullname) TYPE string,
* 返回员工的收入
earnings ABSTRACT RETURNING VALUE(earn) TYPE f,
*打印输出
print ABSTRACT.
PROTECTED SECTION.
PRIVATE SECTION.
DATA: first_name TYPE string,
last_name TYPE string.
ENDCLASS.
CLASS zcl_c5u2_employee IMPLEMENTATION.
METHOD constructor.
first_name = firstname.
last_name = lastname.
ENDMETHOD.
METHOD get_printname.
CONCATENATE last_name first_name INTO fullname SEPARATED BY space.
ENDMETHOD.
ENDCLASS.
Sales
CLASS zcl_c5u2_sales DEFINITION
PUBLIC
INHERITING FROM zcl_c5u2_employee
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
METHODS:
constructor IMPORTING fn TYPE string
ln TYPE string
sal TYPE float
comm TYPE float
quan TYPE i,
setsalary IMPORTING sal TYPE f,
setcomm IMPORTING comm TYPE f,
setquantity IMPORTING qu TYPE i,
earnings REDEFINITION,
print REDEFINITION.
PROTECTED SECTION.
PRIVATE SECTION.
DATA: salary TYPE f,
commission TYPE f,
quantity TYPE i.
ENDCLASS.
CLASS zcl_c5u2_sales IMPLEMENTATION.
METHOD constructor.
CALL METHOD super->constructor
EXPORTING
firstname = fn
lastname = ln
.
salary = sal.
commission = comm.
quantity = quan.
ENDMETHOD.
METHOD setsalary.
salary = sal.
ENDMETHOD.
METHOD setcomm.
commission = comm.
ENDMETHOD.
METHOD setquantity.
quantity = qu.
ENDMETHOD.
METHOD earnings.
earn = salary + commission * quantity.
ENDMETHOD.
METHOD print.
WRITE: /, 'My name is:', get_printname( ).
WRITE: /, 'My salary is:', me->earnings( ) DECIMALS 2 EXPONENT 0.
ENDMETHOD.
ENDCLASS.
Boss
CLASS zcl_c5u2_boss DEFINITION
PUBLIC
INHERITING FROM zcl_c5u2_employee
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
METHODS:
constructor IMPORTING fn TYPE string
ln TYPE string
wl TYPE f,
set_weekly_salary IMPORTING ws TYPE f,
earnings REDEFINITION,
print REDEFINITION.
PROTECTED SECTION.
PRIVATE SECTION.
DATA: weekly_salary TYPE f.
ENDCLASS.
CLASS zcl_c5u2_boss IMPLEMENTATION.
METHOD constructor.
CALL METHOD super->constructor
EXPORTING
firstname = fn
lastname = ln
.
weekly_salary = wl.
ENDMETHOD.
METHOD set_weekly_salary.
weekly_salary = ws.
ENDMETHOD.
METHOD earnings.
earn = weekly_salary * 4.
ENDMETHOD.
METHOD print.
WRITE: /, 'My name is:', get_printname( ).
WRITE: /, 'My salary is:', me->earnings( ) DECIMALS 2 EXPONENT 0.
ENDMETHOD.
ENDCLASS.
Piece Worker
CLASS zcl_c5u2_pieceworker DEFINITION
PUBLIC
INHERITING FROM zcl_c5u2_employee
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
METHODS:
constructor IMPORTING fn TYPE string
ln TYPE string
wg TYPE f
qu TYPE i,
setwage IMPORTING wg TYPE f,
setquan IMPORTING qu TYPE i,
earnings REDEFINITION,
print REDEFINITION.
PROTECTED SECTION.
PRIVATE SECTION.
DATA: wage TYPE f,
quan TYPE i.
ENDCLASS.
CLASS zcl_c5u2_pieceworker IMPLEMENTATION.
METHOD constructor.
CALL METHOD super->constructor
EXPORTING
firstname = fn
lastname = ln.
wage = wg.
quan = qu.
ENDMETHOD.
METHOD setwage.
wage = wg.
ENDMETHOD.
METHOD setquan.
quan = qu.
ENDMETHOD.
METHOD earnings.
earn = wage * quan.
ENDMETHOD.
METHOD print.
WRITE: /, 'My name is:', get_printname( ).
WRITE: /, 'My salary is:', me->earnings( ) DECIMALS 2 EXPONENT 0.
ENDMETHOD.
ENDCLASS.
主程序 - 测试程序
*&---------------------------------------------------------------------*
*& Report zaxyt_c5u2_all
*&---------------------------------------------------------------------*
*& 课程:ABAP 开发入门
*& 章节:第五单元第二课时
*& 作者:A_216 @ Aug 20, 2018
*&---------------------------------------------------------------------*
REPORT zaxyt_c5u2_all.
data: o_sales type ref to zcl_c5u2_sales.
create OBJECT o_sales
EXPORTING
fn = 'Peter'
ln = 'ABC'
sal = '1234.56'
comm = '0.2'
quan = 120000
.
o_sales->print( ).
data: o_emp type ref to zcl_c5u2_employee,
o_boss type ref to zcl_c5u2_boss.
create OBJECT o_boss
EXPORTING
fn = 'Bob'
ln = 'Xu'
wl = '123.45'
.
o_emp = o_boss.
o_emp->print( ).
运行结果展示
![](https://img.haomeiwen.com/i2445987/11ca2cd7de5f8b6f.png)
image
网友评论