一.接口的定义与实现

前文曾提到,对象引用包括类引用和接口引用,通过ABAP类的实例及引用可构建各种商业应用模块及其中的元素。
接口是一个独立结构,可以在其中定义一些成员并在具体类中实现,其作用是对类中已定义的成员进行扩展。实现接口后,其成员将成为公有成员,但类可自行对接口中的方法以自身特定形式实现。
1.定义接口: 和类的定义相似,接口可独立R/3 Repository对象在Class Builder中定义,或ABAP程序局域性定义。
语法: INTERFACE intf.
         DATA ...
         CLASS-DATA ...
         METHOD ...
         ...
       ENDINTERFACE.
语法:CLASS class DEFINITION
   PUBLIC SECTION.
   ...
   INTERFACE: int1,int2.
   ...
   ENDCLASS.
2.实现接口:接口无自己的实例,因而不需要进行实现,其 实现通过具体类进行。
实现部分: CLASS class IMPLEMENTATION
    ...
    METHOD inf1~imeth1.
    ...
    ENDMETHOD.
    ...
    METHOD inf1~imeth2.
    ...
    ENDMETHOD.
    ...
     ENDCLASS.
注:接口intf中的成员icomp在类内部实现过程以名称inf~imeth的形式出现
接口的实现只能出现在公有部分,接口中的定义所有组件都将被添加为该类的公有成员。
在类的实现部分,须包含所有的接口方法。
一个接口可被任意多个不同类实现,该接口中定义的成员集在各个类中名称相同,然而现实方法不同,也就实现了多态性,若一个类中除了接口之外没有定义,任何类自身的公有成员方法,则接口就成为了该类的全部“外部接口”。
注:APPEND语句用来对内表进行数据填充,然后通过LoopAT语句逐行循环处理已天成的数据。

二.接口引用

引用变量也可以基于接口声明变量,即接口引用(一种对象引用),除通过类引用访问之外,还可以通过引用进行访问,因为接口引用可以指向任何实现了该接口的对象
通过TYPES或DATA语句中的TYPE REF TO项进行:
TYPES|DATA iref TYPE REF TO intf.
其中intf是全局或程序中已定义的接口,iref:接口引用 iref->icomp访问其可访问当前指向对象的接口中的可见成员,其中方法以在对象类中实现。
1.通过接口引用访问对象
访问一个类对象,须先声明一个基于该类的引用变量,若该类为一个接口实现,则可将该引用变量赋给一个接口变量,接口变量名iref,类引用cref,iref=cref。若接口中还含有实例属性attr和实例方法meth,则可用
cref->inth~attr.    CALLMETHOD cref->intf~meth.
iref->attr          CALLMETHOD iref->meth.
对于接口中定义静态成员,若是常量,则只能通过接口引用访问:intf=>const
其他静态接口成员,可通过类本身或类引用。
class=>intf~attr CALL METHOD class=intf~meth.
2.在接口引用间赋值
可将接口引用分配给不同引用变量,还可以在类引用和接口引用之间相互赋值。
若类引用cref,接口引用iref,iref1,iref2;
iref1=iref2. iref=cref. cref是参照类是iref的实现。 cref=iref.
两者不参照同一接口声明,或iref2是参照接口iref1的一个成员, cref参照的类须为ABAP预定义空类object
注:强制赋值 运算符 ?= 
MOVE iref ?TO cref.
cref ?= iref.      //不允许时会触发MOVE_CAST_ERROR.
类引用为object参照或强制赋值;接口引用为类引用cref的参照类相同。