INTERFACE f0.
"接口中不能设定成员的权限领域(可见性),或者说接口的组件总是public的
"CLASS-METHODS static_meth. "接口中可以声明静态成员
METHODS meth IMPORTING msg TYPE string OPTIONAL.
DATA str TYPE string.
"接口中的变量不能用value给值,而常量可以。
CONSTANTS cons TYPE string VALUE '常量'.
ENDINTERFACE. "f0
"接口只声明方法,不实现方法,没有implementation部分。
CLASS c1 DEFINITION."不能使用INHERITING FROM 继承借口。
PUBLIC SECTION.
METHODS:outp.
INTERFACES:f0.
"只能在PUBLIC SECTION中声明要使用的接口,可以声明多个接口。
"可以用aliases..for..语句,为接口的每个组件指定别名,方便访问。
"别名只能被当前类和实例访问。
ALIASES meth0 FOR f0~meth.
ENDCLASS.
CLASS c1 IMPLEMENTATION.
METHOD f0~meth. "可以使用别名meth0
WRITE: / , msg.
ENDMETHOD.
METHOD outp.
WRITE: / 'test'.
ENDMETHOD.
ENDCLASS.
CLASS c2 DEFINITION.
PUBLIC SECTION.
INTERFACES:f0.
ENDCLASS.
CLASS c2 IMPLEMENTATION.
METHOD f0~meth.
WRITE: / ,msg.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA ref0 TYPE REF TO f0."定义接口的引用
DATA ref1 TYPE REF TO c1.
DATA ref2 TYPE REF TO c2.
CREATE OBJECT:ref1,ref2.
"把不同的对象分别赋给接口的引用 ————多态性的体现。
ref0 = ref1.
ref0->meth('C1使用接口').
ref0 = ref2.
ref0->meth('C2使用接口').
"接口的引用只能调用它自身所声明了的组件。
"类中新定义的组件,对接口(的引用)是不可见的。
"打开下面这句将会报错。
* ref0->outp( ).
"下面三种调用METHOD的写法是等效的:
CALL METHOD ref1->meth0
EXPORTING
msg = 'test'.
CALL METHOD ref1->meth0( 'test' ).
ref1->meth0( 'test' )."最简形式。
"如果要传递多个参数,可以这样写:
* ref1->meth0( P1 = f1 P2 = f2 ).
"目前ABAP对圆括号的定义尚未规范化:
"括号与参数间可能需要空格,也可能不用空格。
"具体用的时候多尝试即可。
"组件没有别名时,可以用波浪号访问
* ref1->f0~meth( ).