‎2008 Dec 06 10:09 AM
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
‎2008 Dec 06 12:10 PM
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.
‎2008 Dec 06 12:45 PM
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
‎2009 Jan 15 9:34 AM