*&-------------------------------------------------------------------*& ABAP 面向对象学习笔记—(三)接口。
*&-------------------------------------------------------------------
REPORT ZBCRP_OO_LYB_04.
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.
"接口只声明方法,不实现方法,没有implementation部分。
*&-------------------------------------------------------------------
REPORT ZBCRP_OO_LYB_04.
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.
"接口只声明方法,不实现方法,没有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.
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.
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使用接口').
" 接口的引用只能调用它自身所声明了的组件。
" 类中新定义的组件,对接口(的引用)是不可见的。
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( ).
* 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( ).
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论