向上向下转型

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

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而非父类。

bb


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

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

bb


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

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

转载于:http://blog.itpub.net/7714329/viewspace-773929/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值