这里有一篇好文,关于向上向下转型,供参考。
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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7714329/viewspace-773929/