*&---------------------------------------------------------------------*
*& Report ZFACTORY
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZFACTORY.

CLASS Financial_Document DEFINITION ABSTRACT.
  PUBLIC SECTION.
    CLASS-METHODS: factory
      IMPORTING ccode TYPE bukrs
      RETURNING value(ro_obj) TYPE REF TO Financial_Document.
    METHODS: process_output ABSTRACT.
ENDCLASS.


CLASS Financial_Document1 DEFINITION INHERITING FROM Financial_Document.
  PUBLIC SECTION.
    METHODS: process_output REDEFINITION.
ENDCLASS.


CLASS Financial_Document2 DEFINITION INHERITING FROM Financial_Document.
  PUBLIC SECTION.
    METHODS: process_output REDEFINITION.
ENDCLASS.

CLASS Financial_Document IMPLEMENTATION.

    METHOD factory.
      if ccode = 'CC01'.
        CREATE OBJECT ro_obj TYPE Financial_Document1.
       ELSEIF ccode = 'CC02'.
        CREATE OBJECT ro_obj TYPE Financial_Document2.
       endif.
    ENDMETHOD.
ENDCLASS.



*
CLASS Financial_Document1 IMPLEMENTATION.
  METHOD process_output.
    WRITE: / 'Processing balancesheet'.
  ENDMETHOD.                    "process_output
ENDCLASS.



*
CLASS Financial_Document2 IMPLEMENTATION.
  METHOD process_output.
    WRITE: / 'Processing income statement'.
  ENDMETHOD.                    "process_output
ENDCLASS.

START-OF-SELECTION.

DATA: lo_output TYPE REF TO Financial_Document.
      lo_output = Financial_Document=>factory( 'CC02' ).
     lo_output->process_output( ).