zoukankan      html  css  js  c++  java
  • 接口的学习

    1.接口是面向对象的多态性的一种形式,一个接口可以被不同的class实现,接口的属性,方法,事件相同但是在不同的方法中实现的具体功能是不同的;

    2.abap中可以使用SE24定义接口,也可以在代码上定义接口;

    以下代码总结说明:

    *&---------------------------------------------------------------------*
    *& Report  ZTEST_INTERFACE
    *&
    *&---------------------------------------------------------------------*
    *&
    *&
    *&---------------------------------------------------------------------*
    
    REPORT  ztest_interface.
    
    *----------------------------------------------------------------------*
    *       INTERFACE status
    *----------------------------------------------------------------------*
    *
    *----------------------------------------------------------------------*
    INTERFACE worth.
      CONSTANTS: price TYPE p LENGTH 15 DECIMALS 2 VALUE '1234.22'.
    ENDINTERFACE.                    "worth
    
    *----------------------------------------------------------------------*
    *       INTERFACE status
    *----------------------------------------------------------------------*
    *
    *----------------------------------------------------------------------*
    INTERFACE status.
      METHODS write.
      INTERFACES worth.
    ENDINTERFACE.                    "
    
    
    *----------------------------------------------------------------------*
    *       CLASS counter DEFINITION
    *----------------------------------------------------------------------*
    *
    *----------------------------------------------------------------------*
    CLASS counter DEFINITION.
      PUBLIC SECTION.
        INTERFACES status.
        INTERFACES worth.
        METHODS increment.
      PRIVATE SECTION.
        DATA count TYPE i.
    ENDCLASS.                    "counter DEFINITION
    
    *----------------------------------------------------------------------*
    *       CLASS counter IMPLEMENTATION
    *----------------------------------------------------------------------*
    *
    *----------------------------------------------------------------------*
    CLASS counter IMPLEMENTATION.
      METHOD status~write.
        WRITE: / 'Count in counter is' ,count.
      ENDMETHOD.                    "status~write
    
      METHOD increment.
        ADD 1 TO count.
      ENDMETHOD.                    "status~write
    ENDCLASS.                    "counter IMPLEMENTATION
    
    *----------------------------------------------------------------------*
    *       CLASS bicycle DEFINITION
    *----------------------------------------------------------------------*
    *
    *----------------------------------------------------------------------*
    CLASS bicycle DEFINITION.
      PUBLIC SECTION.
        INTERFACES status.
        INTERFACES worth.
        METHODS drive.
      PRIVATE SECTION.
        DATA speed TYPE i.
    ENDCLASS.                    "bicycle DEFINITION
    
    *----------------------------------------------------------------------*
    *       CLASS bicycle IMPLEMENTATION
    *----------------------------------------------------------------------*
    *
    *----------------------------------------------------------------------*
    CLASS bicycle IMPLEMENTATION.
      METHOD status~write.
        WRITE: / 'speed of bicycle is', speed.
      ENDMETHOD.                    "status~write
      METHOD drive.
        ADD 10 TO speed.
      ENDMETHOD.                    "drive
    ENDCLASS.                    "bicycle IMPLEMENTATION
    
    DATA: count TYPE REF TO counter,
          bike TYPE REF TO bicycle,
          status TYPE REF TO status,
          status_tab TYPE TABLE OF REF TO status.
    
    START-OF-SELECTION.
      CREATE OBJECT:count,bike.
    
      DO 5 TIMES.
        CALL METHOD:count->increment,
        bike->drive.
      ENDDO.
    
    *1.接口  status中定义了一个write方法,可以通过类引用变量和接口引用变量两种方式去访问
      CALL METHOD count->status~write. "类引用变量访问
      status = count.
      CALL METHOD status->write.       "接口引用变量访问
    
      APPEND:count TO status_tab,
             bike TO status_tab.
    *2.接口引用间赋值
      DATA status1 TYPE REF TO object.  "参照空类object定义的变量
      DATA status2 TYPE REF TO counter. "参照类定义的变量
      DATA worth TYPE REF TO worth.
      status = count.      "因为count中引用过status这个接口,所以可以直接赋值
      worth = status.      "因为接口status中引用过接口worth,所以可以直接赋值
      status ?= worth.     "因为接口worth中没有引用过接口status,所以必须强制赋值
      status2 ?= status.   "类引用可以直接赋值给接口引用,接口引用想赋值给类引用必须强制赋值,备注:前提该类是引用过该接口的
      status1 = count.     "参照空类object定义的变量, 可以随便给他直接赋值
      status1 = worth.     "参照空类object定义的变量, 可以随便给他直接赋值
    *3.访问接口定义的静态成员
    *3.1对于接口中定义的静态成员,如果该成员是常量,则只能通过接口引用进行访问
    *如:intf=>const
    *3.2 对于其他静态接口成员,则可以通过接口的类本身或者类的引用进行访问
    *如:class=>intf~attr  或 call method class=>intf~meth
    
      DATA lv_price TYPE p LENGTH 15 DECIMALS 2.
      "lv_price = count->worth~price.
      lv_price = worth->price.
      LOOP AT status_tab INTO status.
        CALL METHOD status->write.
      ENDLOOP.
  • 相关阅读:
    use other gpio pins as i2c
    systemd详解详解
    Python ctype sizeof incorrect!
    libvirt 安装篇
    Django Restful Framework (二): ModelSerializer
    Django Restful Framework (一): Serializer
    libvirt 网络手册(二):桥接网络
    KVM 虚拟机联网方式:NAT 和 Bridge
    libvirt 网络手册(一)
    CentOS 7 环境配置
  • 原文地址:https://www.cnblogs.com/caizjian/p/5519966.html
Copyright © 2011-2022 走看看