1.接口是面向对象的多态性的一种形式,一个接口可以被不同的class实现,接口的属性,方法,事件相同但是在不同的方法中实现的具体功能是不同的;
2.abap中可以使用SE24定义接口,也可以在代码上定义接口;
以下代码总结说明:
*&---------------------------------------------------------------------* *& Report ZTEST_INTERFACE *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ztest_interface. *----------------------------------------------------------------------* * INTERFACE status *----------------------------------------------------------------------* * *----------------------------------------------------------------------* INTERFACE worth. CONSTANTS: price TYPE p LENGTH 15 DECIMALS 2 VALUE '1234.22'. ENDINTERFACE. "worth *----------------------------------------------------------------------* * INTERFACE status *----------------------------------------------------------------------* * *----------------------------------------------------------------------* INTERFACE status. METHODS write. INTERFACES worth. ENDINTERFACE. " *----------------------------------------------------------------------* * CLASS counter DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS counter DEFINITION. PUBLIC SECTION. INTERFACES status. INTERFACES worth. METHODS increment. PRIVATE SECTION. DATA count TYPE i. ENDCLASS. "counter DEFINITION *----------------------------------------------------------------------* * CLASS counter IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS counter IMPLEMENTATION. METHOD status~write. WRITE: / 'Count in counter is' ,count. ENDMETHOD. "status~write METHOD increment. ADD 1 TO count. ENDMETHOD. "status~write ENDCLASS. "counter IMPLEMENTATION *----------------------------------------------------------------------* * CLASS bicycle DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS bicycle DEFINITION. PUBLIC SECTION. INTERFACES status. INTERFACES worth. METHODS drive. PRIVATE SECTION. DATA speed TYPE i. ENDCLASS. "bicycle DEFINITION *----------------------------------------------------------------------* * CLASS bicycle IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS bicycle IMPLEMENTATION. METHOD status~write. WRITE: / 'speed of bicycle is', speed. ENDMETHOD. "status~write METHOD drive. ADD 10 TO speed. ENDMETHOD. "drive ENDCLASS. "bicycle IMPLEMENTATION DATA: count TYPE REF TO counter, bike TYPE REF TO bicycle, status TYPE REF TO status, status_tab TYPE TABLE OF REF TO status. START-OF-SELECTION. CREATE OBJECT:count,bike. DO 5 TIMES. CALL METHOD:count->increment, bike->drive. ENDDO. *1.接口 status中定义了一个write方法,可以通过类引用变量和接口引用变量两种方式去访问 CALL METHOD count->status~write. "类引用变量访问 status = count. CALL METHOD status->write. "接口引用变量访问 APPEND:count TO status_tab, bike TO status_tab. *2.接口引用间赋值 DATA status1 TYPE REF TO object. "参照空类object定义的变量 DATA status2 TYPE REF TO counter. "参照类定义的变量 DATA worth TYPE REF TO worth. status = count. "因为count中引用过status这个接口,所以可以直接赋值 worth = status. "因为接口status中引用过接口worth,所以可以直接赋值 status ?= worth. "因为接口worth中没有引用过接口status,所以必须强制赋值 status2 ?= status. "类引用可以直接赋值给接口引用,接口引用想赋值给类引用必须强制赋值,备注:前提该类是引用过该接口的 status1 = count. "参照空类object定义的变量, 可以随便给他直接赋值 status1 = worth. "参照空类object定义的变量, 可以随便给他直接赋值 *3.访问接口定义的静态成员 *3.1对于接口中定义的静态成员,如果该成员是常量,则只能通过接口引用进行访问 *如:intf=>const *3.2 对于其他静态接口成员,则可以通过接口的类本身或者类的引用进行访问 *如:class=>intf~attr 或 call method class=>intf~meth DATA lv_price TYPE p LENGTH 15 DECIMALS 2. "lv_price = count->worth~price. lv_price = worth->price. LOOP AT status_tab INTO status. CALL METHOD status->write. ENDLOOP.