*&---------------------------------------------------------------------*
*& Report ZSCH_09_BIER
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zsch_09_bier.

CLASS lcl_bier DEFINITION.
  PUBLIC SECTION.
    TYPES: gdt_alkoholgehalt TYPE p LENGTH 3 DECIMALS 2.
    METHODS: set_alkoholgehalt
      IMPORTING id_aloholgehalt TYPE gdt_alkoholgehalt,
      brauen.
  PROTECTED SECTION.
  PRIVATE SECTION.
    DATA: gd_alkoholgehalt TYPE gdt_alkoholgehalt
    VALUE '4.50'.
ENDCLASS.
CLASS lcl_bier IMPLEMENTATION.
  METHOD set_alkoholgehalt.
    me->gd_alkoholgehalt = id_aloholgehalt.
  ENDMETHOD.
  METHOD brauen.
    WRITE: /'Brauen'.
  ENDMETHOD.
ENDCLASS.

CLASS lcl_bier_untergaerig DEFINITION INHERITING FROM lcl_bier.
  PUBLIC SECTION.
    METHODS: brauen REDEFINITION.
    METHODS: set_alkoholgehalt REDEFINITION.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.
CLASS lcl_bier_untergaerig IMPLEMENTATION.
  METHOD brauen.
    CALL METHOD super->brauen.
    WRITE: /'Sogar untergrig'.
  ENDMETHOD.
  METHOD set_alkoholgehalt.
  ENDMETHOD.
ENDCLASS.

CLASS lcl_bier_obergaerig DEFINITION INHERITING FROM lcl_bier.
  PUBLIC SECTION.
    METHODS: brauen REDEFINITION.
    METHODS: set_alkoholgehalt REDEFINITION.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.
CLASS lcl_bier_obergaerig IMPLEMENTATION.
  METHOD brauen.
    CALL METHOD super->brauen.
    WRITE: /'Sogar obergrig'.
  ENDMETHOD.
  METHOD set_alkoholgehalt.
  ENDMETHOD.
ENDCLASS.
DATA: gr_obergaerig TYPE REF TO lcl_bier_obergaerig,
      gr_unterbier  TYPE REF TO lcl_bier_untergaerig,
      gr_bier       TYPE REF TO lcl_bier.

START-OF-SELECTION.
  gr_bier = NEW lcl_bier_untergaerig( ).
  gr_obergaerig ?= gr_bier.
