ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 向上向下转型

向上向下转型

原创 Linux操作系统 作者:yangjulei 时间:2013-10-09 10:23:56 0 删除 编辑

这里有一篇好文,关于向上向下转型,供参考。

https://blog.csdn.net/yang362046076/article/details/51134104


个人理解

  • 向上转型是把子类引用实例化父类对象。

  • 向下转型是把父类引用实例化子类对象。


因为父亲有的,儿子肯定也有。所以可以直接转型。

lo_son = lo_father.(向上)


但是儿子有的,父亲不一定有。所以需要强制转型。

lo_father ?= lo_son.(向下)


下面的代码是abap中如何实现向上转型。

*----------------------------------------------------------------------*
*       CLASS LCL_FATHER DEFINITION
*----------------------------------------------------------------------*

CLASS LCL_FATHER DEFINITION.
  PUBLIC SECTION.
  METHODS DISPLAY_FATHER.
ENDCLASS.                    "lcl_father DEFINITION
*----------------------------------------------------------------------*
*       CLASS LCL_FATHER IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS LCL_FATHER IMPLEMENTATION.
  METHOD DISPLAY_FATHER.
    WRITE / ' this is display_father'.
  ENDMETHOD.                    "display_father
ENDCLASS.                    "lcl_father IMPLEMENTATION
*----------------------------------------------------------------------*
*       CLASS lcl_son DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_SON DEFINITION INHERITING FROM LCL_FATHER.
  PUBLIC SECTION.
    methods display_father REDEFINITION . "重定义,abap没有重写方法的功能
    METHODS DISPLAY_SON.
ENDCLASS.                    "lcl_son DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_son IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_SON IMPLEMENTATION.
  METHOD DISPLAY_FATHER .
    WRITE / ' this is display_father in son'.
  ENDMETHOD.
  METHOD DISPLAY_SON.
    WRITE / ' this is display_son'.
  ENDMETHOD.                    "display_son
ENDCLASS.                    "lcl_son IMPLEMENTATION
START-OF-SELECTION.
  DATA: GO_FATHER TYPE REF TO LCL_FATHER,
      GO_SON    TYPE REF TO LCL_SON,
      GO_SON2   TYPE REF TO LCL_SON.
CREATE OBJECT GO_SON.

"向上转型:把子类对象当作父类对象,可以直接转型
GO_FATHER = GO_SON.
CALL METHOD GO_father->DISPLAY_FATHER.
"上面调用的方法是子类的display_father而非父类。



说明father调用到了son的方法.

如果不转型,father还是father. 结果如下
CREATE OBJECT GO_FATHER.
*GO_FATHER = GO_SON.
CALL METHOD GO_father->DISPLAY_FATHER.


向下转型的例子可参见开始处提供的链接。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7714329/viewspace-773929/,如需转载,请注明出处,否则将追究法律责任。

上一篇: table control 功能
请登录后发表评论 登录
全部评论

注册时间:2010-03-08

  • 博文量
    71
  • 访问量
    197898