当有些类具有相同的功能却有不同的行为时,就产生了接口的概念。接口这样描述自己:“对于实现所有类,看起来都应该像现在这个样子”。因此,采用了一个特定接口,所有代码都知道对于那个接口可能会调用什么方法。所以常把接口用于建立类和类之间的一个“协议”。有些面向对象的程序设计语言采用了一个名为“Protocol”(协议)的关键字,它做的便是与接口相同的事情。接口只有声明部分,并不提供实现的细节。
1.接口的定义与实现
对象引用包括类引用和接口引用,通过ABAP类的实例及引用可构建各种商业应用模块及其中的元素。
接口是一个独立结构,可以在其中定义一些成员并在具体类中实现,其作用是对类中已定义的成员进行扩展。实现接口后,其成员将成为公有成员,但类可自行对接口中的方法以自身特定形式实现。
1)定义接口:与类的定义相似,接口作为独立R/3 Repository的对象在Class Builder中定义,也可以依附于程序在ABAP程序中定义(本地类)。
2)实现接口:接口没有自己的实例,因而不需要进行实现,其实现通过具体类进行。
注:接口intf中的成员icomp在类内部实现过程以名称inf~imeth的形式出现。
接口的实现只能出现在公有部分,接口中定义的所有组件都将被添加为该类的公有成员。在类的实现部分须包含所有的接口方法。
一个接口可被任意多个不同类实现,该接口中定义的成员集在各个类中名称相同,然而实现方法不同,也就体现了多态性。若一个类中除了接口之外没有定义任何类自身的公有成员方法,则接口就成为了该类的全部“外部接口”。
2.接口的定义方法
接口跟类一样,也有全局接口和本地接口。
1)全局接口的定义由类定义工具实现(事务码SE24)。
2)本地接口的定义
本地接口封装在INTERFACE...ENDINTERFACE中,包含所有的部件(属性、方法、事件)。所有的部件不能包含可视部分,并且自动会被声明为PUBLIC。
由于接口没有实现部分,它是在类中实现的。类中对接口的声明如下:
3)类中接口部件的实现
类实现部分对接口方法的实现如下:
3.接口引用
引用变量也可以基于接口声明变量,即接口引用(一种对象引用)。除通过类引用访问之外,还可以通过引用进行访问,因为接口引用可以指向任何实现了该接口的对象。(www.daowen.com)
通过TYPES或DATA语句中的TYPE REF TO项进行:
其中intf是全局或程序中已定义的接口,iref接口引用iref->icomp访问。其可访问当前指向对象的接口中的可见成员,其方法可以在对象类中实现。
1)通过接口引用访问对象
访问一个类对象,须先声明一个基于该类的引用变量,若该类为一个接口实现,则可将该引用变量赋给一个接口变量,接口变量名iref,类引用cref,iref=cref。若接口中还含有实例属性attr和实例方法meth,如:
对于接口中定义静态成员,若是常量,则只能通过接口引用访问;其他静态接口成员,可通过类本身或类引用。如:
2)在接口引用间赋值
可将接口引用分配给不同引用变量,还可以在类引用和接口引用之间相互赋值。若类引用cref为相同的接口或类,可直接赋值。如:
两者不参照同一接口声明,或iref2是参照接口iref1的一个成员,强制赋值运算符?=可使接口数据间进行数据交换。
类引用为Object参照或强制赋值;接口引用与类引用cref的参照类相同。
3)接口的使用
先用TYPE REF TO和DATA声明接口变量,但不能用CREAT来创建实例,而是通过参考其他已存在的类变量或接口变量来代替。
(1)接口实例组件的两种使用方法
通过类实例使用:
通过接口变量使用:
(2)接口静态组件的使用方法
常量可以使用:
其他静态组件必须使用:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。