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( ).
相关文章
- websphere内存溢出,手动导出was的phd和javacore文件
- 在Maven项目中添加代码目录下的配置文件
- C语言的作用域规则
- IdentityServer4-客户端的授权模式原理分析(三)
- nor flash 和nand flash 的区别
- 【编程练习】快速select算法的实现
- jQuery的$.get()函数不执行以及php端报错Uncaught Error: Call to a member function bind_param() on boolean in...
- 如何看待微软新开源的LightGBM?
- 【Linux】CentOS7 alien命令 转化deb 与 rpm的相互转化
- div clear清除浮动产生的影响 被受影响的div加上清除浮动后 不会填充前一个div浮动后空出的位置