SAP ABAP 接口

与 ABAP 中的类类似,接口充当对象的数据类型。接口的组件与类的组件相同。与类的声明不同,接口的声明不包括可见性部分。这是因为在接口声明中定义的组件总是集成在类的公共可见性部分。当两个相似的类具有相同名称的方法,但功能不同时,使用接口。接口可能看起来类似于类,但在接口中定义的函数是在类中实现的,以扩展该类的范围。

接口和继承特性为多态性提供了基础。这是因为在接口中定义的方法在不同类中的行为可能不同。

以下是创建接口的一般格式:

  1. INTERFACE <intf_name>.
  2. DATA.....
  3. CLASS-DATA.....
  4. METHODS.....
  5. CLASS-METHODS.....
  6. ENDINTERFACE.

在此语法中,<intf_name> 表示接口的名称。DATACLASSDATA 语句可分别用于定义接口的实例属性和静态属性。

METHODSCLASS-METHODS 语句可分别用于定义接口的实例方法和静态方法。由于接口的定义不包括实现类,因此无需在接口声明中添加定义子句。

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

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

  1. INTERFACE <intf_name>.

在此语法中,<intf_name> 表示接口的名称。

注意,该语法必须在类的公共部分中使用。

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

  1. METHOD <intf_name~method_m>.
  2. <statements>.
  3. ENDMETHOD.

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


实例

  1. Report ZINTERFACE1.
  2. INTERFACE my_interface1.
  3. Methods msg.
  4. ENDINTERFACE.
  5. CLASS num_counter Definition.
  6. PUBLIC Section.
  7. INTERFACES my_interface1.
  8. Methods add_number.
  9. PRIVATE Section.
  10. Data num Type I.
  11. ENDCLASS.
  12. CLASS num_counter Implementation.
  13. Method my_interface1~msg.
  14. Write: / 'The number is', num.
  15. EndMethod.
  16. Method add_number.
  17. ADD 7 TO num.
  18. EndMethod.
  19. ENDCLASS.
  20. CLASS drive1 Definition.
  21. PUBLIC Section.
  22. INTERFACES my_interface1.
  23. Methods speed1.
  24. PRIVATE Section.
  25. Data wheel1 Type I.
  26. ENDCLASS.
  27. CLASS drive1 Implementation.
  28. Method my_interface1~msg.
  29. Write: / 'Total number of wheels is', wheel1.
  30. EndMethod.
  31. Method speed1.
  32. Add 4 To wheel1.
  33. EndMethod.
  34. ENDCLASS.
  35. Start-Of-Selection.
  36. Data object1 Type Ref To num_counter.
  37. Create Object object1.
  38. CALL Method object1add_number.
  39. CALL Method object1my_interface1~msg.
  40. Data object2 Type Ref To drive1.
  41. Create Object object2.
  42. CALL Method object2speed1.
  43. CALL Method object2my_interface1~msg.

结果如下:

  1. The number is 7
  2. Total number of wheels is 4

在上面的实例中,my_interface1 是包含 msg 方法的接口的名称。接下来,定义并实现了两个类,num_counterdrive1。这两个类都实现了 msg 方法,还实现了定义各自实例行为的特定方法,例如 add_numberspeed1 方法。

注意add_numberspeed1 方法是各自的类指定的。