*&-------------------------------------------------------------------*& 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部分。

CLASS c1 DEFINITION"不能使用INHERITING FROM 继承接口。
 PUBLIC SECTION.
    METHODSoutp.
    INTERFACESf0.   
   " 只能在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.
   INTERFACESf0.
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 OBJECTref1ref2.

"把不同的对象分别赋给接口的引用 —— 多态性的体现。
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( ).

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。