ABAP------>OO 拔草

本文通过具体的员工薪资计算示例,深入浅出地讲解了面向对象编程的基本概念,包括类的定义、继承、方法重定义及事件处理,展示了如何利用面向对象特性进行模块化设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*&---------------------------------------------------------------------*
*& Report  Y_JAMES_OO_DAY3
*&
*&---------------------------------------------------------------------*
*&Use a example to show what the hell OO!!!!!
*&---------------------------------------------------------------------*

REPORT Y_JAMES_OO_DAY3.

CLASS Emp DEFINITION.

  PUBLIC SECTION.
  DATA:
    Empno  TYPE n,
    Ename  TYPE char10,
    Enums  TYPE i,
    Eprice TYPE i.

  METHODS:
    Calculatepay RETURNING VALUE(ipay) TYPE i,
    Displaypay   IMPORTING VALUE(ipay) TYPE i.

ENDCLASS.

CLASS Emp IMPLEMENTATION .

  METHOD Calculatepay.
    ipay = Enums * Eprice.
  ENDMETHOD.

  METHOD Displaypay.
    WRITE: / 'The pay for employee',
              Empno,Ename,
              'is',
              ipay,/.
  ENDMETHOD.

ENDCLASS.

CLASS SpecialWorker DEFINITION INHERITING FROM Emp.

  PUBLIC SECTION.
  EVENTS: LazyEmployee.

  DATA:
    Enums_extra TYPE i.
  METHODS:
  Calculatepay REDEFINITION.

 ENDCLASS.

CLASS SpecialWorker IMPLEMENTATION.

  METHOD Calculatepay.
    ipay = ( Enums       * Eprice     ) +
           ( Enums_extra * Eprice * 2 ) .

    IF Enums <= 100.

      WRITE: ename.
      RAISE EVENT LazyEmployee.

    ENDIF.

  ENDMETHOD.

ENDCLASS.

*CLASS FireWorker DEFINITION.
CLASS FireWorker  DEFINITION.

  PUBLIC SECTION.
  METHODS YouAreFired
  FOR EVENT LazyEmployee of Specialworker.

ENDCLASS.CLASS FireWorker IMPLEMENTATION.
  METHOD YouAreFired.
    WRITE: / 'You are so lazy, because of produced less than 100 units,so you are be fired'.
  ENDMETHOD.
ENDCLASS.

DATA:MyPay TYPE i.

START-OF-SELECTION.
*-----------------------------------------------------------------------
* Using the Employee named James to show you how to write
*-----------------------------------------------------------------------
DATA: Go_James TYPE REF TO Emp,
      Go_Scott TYPE REF TO specialworker,
      Go_Junji TYPE REF TO specialworker,
      Fire_Jun TYPE REF TO fireworker.

CREATE OBJECT Go_james.
go_james->empno       = '111'             .
go_james->ename       = 'James'           .
go_james->enums       = '500'             .
go_james->eprice      = '3'               .
mypay = go_james->calculatepay( )         .
CALL METHOD go_james->displaypay( mypay ) .

*CLEAR mypay.
CREATE OBJECT go_scott.
go_scott->empno       = '222'             .
go_scott->ename       = 'Scott'           .
go_scott->enums       = '500'             .
go_scott->eprice      = '3'               .
go_scott->enums_extra = '50'              .
mypay = go_scott->calculatepay( )         .
CALL METHOD go_scott->displaypay( mypay ) .

*CLEAR mypay.
CREATE OBJECT: go_junji,
               fire_jun.

SET HANDLER fire_jun->youarefired FOR go_junji.
go_junji->empno       = '333'             .
go_junji->ename       = 'Jubjie'          .
go_junji->enums       = '80'             .
go_junji->eprice      = '3'               .
go_junji->enums_extra = '0'               .

*CLEAR mypay.
mypay = go_junji->calculatepay( )         .
CALL METHOD go_junji->displaypay( mypay ) .

 

转载于:https://www.cnblogs.com/HARU/p/7998900.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值