Sunday, April 20, 2014

ABAP - Inheritance


  REPORT  ZMYSAPLIBRARY.

*******************************************************


* Super class LCL_CompanyEmployees


*******************************************************


CLASS lcl_company_employees DEFINITION.
  PUBLIC SECTION.
    TYPES:
      BEGIN OF t_employee,
        no  TYPE i,
        name TYPE string,
        wage TYPE i,
     END OF t_employee.
    METHODS:
      constructor,
      add_employee
        IMPORTING im_no   TYPE i
                  im_name TYPE string
                  im_wage TYPE i,
      display_employee_list,
      display_no_of_employees.



  PRIVATE SECTION.
    CLASS-DATAi_employee_list TYPE TABLE OF t_employee,
                no_of_employees TYPE i.
ENDCLASS.
*-- CLASS LCL_CompanyEmployees IMPLEMENTATION
CLASS lcl_company_employees IMPLEMENTATION.
  METHOD constructor.
    no_of_employees no_of_employees + 1.
  ENDMETHOD.
  METHOD add_employee.
*   Adds a new employee to the list of employees
    DATAl_employee TYPE t_employee.
    l_employee-no im_no.
    l_employee-name im_name.
    l_employee-wage im_wage.
    APPEND l_employee TO i_employee_list.
  ENDMETHOD.
  METHOD display_employee_list.
*   Displays all employees and there wage
    DATAl_employee TYPE t_employee.
    WRITE'List of Employees'.
    LOOP AT i_employee_list INTO l_employee.
      WRITE/ l_employee-nol_employee-namel_employee-wage.
    ENDLOOP.
  ENDMETHOD.
  METHOD display_no_of_employees.
*   Displays total number of employees
    SKIP 3.
    WRITE'Total number of employees:'no_of_employees.
  ENDMETHOD.
ENDCLASS.



*******************************************************


* Sub class LCL_BlueCollar_Employee


*******************************************************


CLASS lcl_bluecollar_employee DEFINITION


          INHERITING FROM lcl_company_employees.
  PUBLIC SECTION.
    METHODS:
        constructor
          IMPORTING im_no             TYPE i
                    im_name           TYPE string
                    im_hours          TYPE i
                    im_hourly_payment TYPE i,
         add_employee REDEFINITION.
  PRIVATE SECTION.
    DATA:no             TYPE i,
         name           TYPE string,
         hours          TYPE i,
         hourly_payment TYPE i.



ENDCLASS.
*---- CLASS LCL_BlueCollar_Employee IMPLEMENTATION
CLASS lcl_bluecollar_employee IMPLEMENTATION.
  METHOD constructor.
*   The superclass constructor method must be called from the subclass


*   constructor method
    CALL METHOD super->constructor.
    no im_no.
    name im_name.
    hours im_hours.
    hourly_payment im_hourly_payment.
  ENDMETHOD.
  METHOD add_employee.
*   Calculate wage an call the superclass method add_employee to add


*   the employee to the employee list
    DATAl_wage TYPE i.
    l_wage hours * hourly_payment.
    CALL METHOD super->add_employee
      EXPORTING im_no no
                im_name name
                im_wage l_wage.
  ENDMETHOD.
ENDCLASS.
*******************************************************


* Sub class LCL_WhiteCollar_Employee


*******************************************************
CLASS lcl_whitecollar_employee DEFINITION


    INHERITING FROM lcl_company_employees.
  PUBLIC SECTION.
    METHODS:
        constructor
          IMPORTING im_no                 TYPE i
                    im_name               TYPE string
                    im_monthly_salary     TYPE i
                    im_monthly_deducations TYPE i,
         add_employee REDEFINITION.
  PRIVATE SECTION.
    DATA:
      no                    TYPE i,
      name                  TYPE string,
      monthly_salary        TYPE i,
      monthly_deducations    TYPE i.
ENDCLASS.
*---- CLASS LCL_WhiteCollar_Employee IMPLEMENTATION
CLASS lcl_whitecollar_employee IMPLEMENTATION.
  METHOD constructor.
*   The superclass constructor method must be called from the subclass


*   constructor method


    CALL METHOD super->constructor.
    no im_no.
    name im_name.
    monthly_salary im_monthly_salary.
    monthly_deducations im_monthly_deducations.
  ENDMETHOD.
  METHOD add_employee.
*   Calculate wage an call the superclass method add_employee to add


*   the employee to the employee list
    DATAl_wage TYPE i.
    l_wage monthly_salary monthly_deducations.
    CALL METHOD super->add_employee
      EXPORTING im_no no
                im_name name
                im_wage l_wage.
  ENDMETHOD.
ENDCLASS.
*******************************************************


* R E P O R T


*******************************************************
DATA:
* Object references
  o_bluecollar_employee1  TYPE REF TO lcl_bluecollar_employee,
  o_whitecollar_employee1 TYPE REF TO lcl_whitecollar_employee.
START-OF-SELECTION.
* Create bluecollar employee obeject
  CREATE OBJECT o_bluecollar_employee1
      EXPORTING im_no  1
                im_name  'Gylle Karen'
                im_hours 38
                im_hourly_payment 75.
* Add bluecollar employee to employee list
  CALL METHOD o_bluecollar_employee1->add_employee
      EXPORTING im_no  1
                im_name  'Gylle Karen'
                im_wage 0.
* Create whitecollar employee obeject
  CREATE OBJECT o_whitecollar_employee1
      EXPORTING im_no  2
                im_name  'John Dickens'
                im_monthly_salary 10000
                im_monthly_deducations 2500.
* Add bluecollar employee to employee list
  CALL METHOD o_whitecollar_employee1->add_employee
      EXPORTING im_no  1
                im_name  'Karen Johnson'
                im_wage 0.
* Display employee list and number of employees. Note that the result


* will be the same when called from o_whitecollar_employee1 or


* o_bluecolarcollar_employee1, because the methods are defined


* as static (CLASS-METHODS)
  CALL METHOD o_whitecollar_employee1->display_employee_list.
  CALL METHOD o_whitecollar_employee1->display_no_of_employees.

No comments:

Post a Comment