SAP ABAP – 接口

SAP ABAP – 接口


类似于 ABAP 中的类,接口充当对象的数据类型。接口的组件与类的组件相同。与类的声明不同,接口的声明不包括可见性部分。这是因为在接口声明中定义的组件总是集成在类的公共可见性部分中。

当两个相似的类具有相同名称的方法,但功能彼此不同时,将使用接口。接口可能看起来与类相似,但接口中定义的函数在类中实现以扩展该类的范围。接口和继承特性为多态性提供了基础。这是因为在接口中定义的方法在不同的类中的行为可能不同。

以下是创建界面的一般格式 –

INTERFACE <intf_name>. 
DATA..... 
CLASS-DATA..... 
METHODS..... 
CLASS-METHODS..... 
ENDINTERFACE.

在此语法中,<intf_name> 表示接口的名称。DATA 和 CLASSDATA 语句可分别用于定义接口的实例和静态属性。METHODS 和 CLASS-METHODS 语句可分别用于定义接口的实例方法和静态方法。由于接口的定义不包括实现类,因此无需在接口声明中添加 DEFINITION 子句。

注意– 接口的所有方法都是抽象的。它们是完整声明的,包括它们的参数接口,但未在接口中实现。所有要使用接口的类都必须实现该接口的所有方法。否则,该类将成为抽象类。

我们在类的实现部分使用以下语法 –

INTERFACE <intf_name>. 

在此语法中,<intf_name> 表示接口的名称。请注意,必须在类的公共部分中使用此语法。

以下语法用于在类的实现中实现接口的方法 –

METHOD <intf_name~method_m>. 
<statements>. 
ENDMETHOD.

在此语法中,<intf_name~method_m> 表示 <intf_name> 接口的方法的完整声明名称。

例子

Report ZINTERFACE1. 
INTERFACE my_interface1. 
Methods msg. 
ENDINTERFACE. 

CLASS num_counter Definition. 
PUBLIC Section. 
INTERFACES my_interface1. 
Methods add_number. 
PRIVATE Section. 
Data num Type I. 
ENDCLASS. 

CLASS num_counter Implementation. 
Method my_interface1~msg. 
Write: / 'The number is', num. 
EndMethod. 

Method add_number. 
ADD 7 TO num. 
EndMethod. 
ENDCLASS. 

CLASS drive1 Definition. 
PUBLIC Section. 
INTERFACES my_interface1. 
Methods speed1.
PRIVATE Section.
Data wheel1 Type I. 
ENDCLASS. 

CLASS drive1 Implementation.
Method my_interface1~msg.
Write: / 'Total number of wheels is', wheel1. 
EndMethod. 

Method speed1. 
Add 4 To wheel1. 
EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
Data object1 Type Ref To num_counter. 
Create Object object1. 

CALL Method object1→add_number.
CALL Method object1→my_interface1~msg.

Data object2 Type Ref To drive1. 
Create Object object2.
 
CALL Method object2→speed1. 
CALL Method object2→my_interface1~msg. 

上面的代码产生以下输出 –

The number is 7 
Total number of wheels is 4

在上面的示例中,my_interface1 是包含 ‘msg’ 方法的接口的名称。接下来,定义并实现两个类,num_counter 和 drive1。这两个类都实现了 ‘msg’ 方法以及定义其各自实例行为的特定方法,例如 add_number 和 speed1 方法。

注意– add_number 和 speed1 方法特定于相应的类。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁