Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

How to make interface work ?

Former Member
0 Likes
377

Hello SDNers,

I have written the below snippet.

Can any one explain now to call the method of the following 2 classes which are implemented within the interdace intf_counter..


REPORT  ZNRD_CLASS_INTERFACE1.

interface intf_counter.
  methods : set_counter importing value(set_value) type i,
            increment_counter,
            get_counter exporting value(get_value) type i.
endinterface.

class lcl_counter1 definition.
public section.
  interfaces intf_counter.
private section.
  data : count type i.
endclass.

class lcl_counter1 implementation.

  method intf_counter~set_counter.
  count = set_value.
  endmethod.

  method intf_counter~increment_counter.
    add 1 to count.
  endmethod.

  method intf_counter~get_counter.
    get_value = count.
  endmethod.
endclass.

class lcl_counter2 definition.
public section.
   interfaces intf_counter.
private section.
  data : count type i.
endclass.

class lcl_counter2 implementation.

method intf_counter~set_counter.
  count = ( set_value / 10 ) * 10.
endmethod.

method intf_counter~increment_counter.
  if count ge 100.
    write:/ 'Count greater than 100 '.
    count = 0.
  else.
    add 10 to count.
  endif.
endmethod.

method intf_counter~get_counter.
  get_value = count.
endmethod.
endclass.

Regards,

Ranjith N

3 REPLIES 3
Read only

narin_nandivada3
Active Contributor
0 Likes
355

Please check the following Snippet...


Data: w_ref1 type ref to lcl_counter1,
         w_ref2 type ref to lcl_counter2.

* Calling class1 interface methods............................
call method w_ref1->intf_counter~set_counter.
call method w_ref1->intf_counter~increment_counter.
call method w_ref1->intf_counter~get_counter.

* in the same way call the second class methods.

Hope this would help you.

Good luck

Narin.

Read only

uwe_schieferstein
Active Contributor
0 Likes
355

Hello

Assuming that you interface methods are (public) instance methods you first need to create an instance of your class.


*&---------------------------------------------------------------------*
*& Report  ZNRD_CLASS_INTERFACE1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  znrd_class_interface1.


*----------------------------------------------------------------------*
*       INTERFACE intf_counter
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
INTERFACE intf_counter.
  METHODS : set_counter IMPORTING value(set_value) TYPE i,
            increment_counter,
            get_counter EXPORTING value(get_value) TYPE i.
ENDINTERFACE.                    "intf_counter

*----------------------------------------------------------------------*
*       CLASS lcl_counter1 DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_counter1 DEFINITION.
  PUBLIC SECTION.
    INTERFACES intf_counter.
  PRIVATE SECTION.
    DATA : count TYPE i.
ENDCLASS.                    "lcl_counter1 DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_counter1 IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_counter1 IMPLEMENTATION.

  METHOD intf_counter~set_counter.
    count = set_value.
  ENDMETHOD.                    "intf_counter~set_counter

  METHOD intf_counter~increment_counter.
    ADD 1 TO count.
  ENDMETHOD.                    "intf_counter~increment_counter

  METHOD intf_counter~get_counter.
    get_value = count.
  ENDMETHOD.                    "intf_counter~get_counter
ENDCLASS.                    "lcl_counter1 IMPLEMENTATION

*----------------------------------------------------------------------*
*       CLASS lcl_counter2 DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_counter2 DEFINITION.
  PUBLIC SECTION.
    INTERFACES intf_counter.
  PRIVATE SECTION.
    DATA : count TYPE i.
ENDCLASS.                    "lcl_counter2 DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_counter2 IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_counter2 IMPLEMENTATION.

  METHOD intf_counter~set_counter.
    count = ( set_value / 10 ) * 10.
  ENDMETHOD.                    "intf_counter~set_counter

  METHOD intf_counter~increment_counter.
    IF count GE 100.
      WRITE:/ 'Count greater than 100 '.
      count = 0.
    ELSE.
      ADD 10 TO count.
    ENDIF.
  ENDMETHOD.                    "intf_counter~increment_counter

  METHOD intf_counter~get_counter.
    get_value = count.
  ENDMETHOD.                    "intf_counter~get_counter
ENDCLASS.                    "lcl_counter2 IMPLEMENTATION


DATA:
  go_counter    TYPE REF TO lcl_counter1,
  gif_counter    TYPE REF TO intf_counter.

START-OF-SELECTION.

  CREATE OBJECT go_counter.
  CALL METHOD go_counter->intf_counter~set_counter( set_value = 1 ).

  " Or:

  gif_counter ?= go_counter.
  CALL METHOD gif_counter->set_counter( set_value = 1 ).

  " Or:
  CREATE OBJECT gif_counter type ('LCL_COUNTER1').
  CALL METHOD gif_counter->set_counter( set_value = 1 ).


END-OF-SELECTION.

Regards

Uwe

Read only

Former Member
0 Likes
355

answered