尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

117 多态与动态绑定

117 多态与动态绑定 117 多态与动态绑定昨天半夜被电话叫醒,客户说某个报表在测试环境跑得好好的,生产上一执行就dump。我远程一看,错误是CX_SY_MOVE_CAST_ERROR,报错位置在一个用了三年的类方法里。当时第一个反应是“谁动了我的对象引用”?查了半天,发现是那边程序员把子类实例赋给了父类变量,然后直接调用子类独有的方法,没做类型检查。这就是典型的“编译期看着没错,运行期炸了”的动态绑定问题。今天我们就拿这个场景聊聊ABAP里的多态到底怎么落地,以及动态绑定那些坑。先明确一个概念:多态不是“一个类继承另一个类”这个动作,而是“同一个方法在不同子类里有不同实现,并且通过父类引用调用时,能自动走到正确的实现去”。ABAP里最朴素的多态就是方法重写。假设有个父类ZCL_ANIMAL,定义了实例方法MAKE_SOUND,子类ZCL_DOG和ZCL_CAT分别重写它。那代码写起来就是:DATA lo_animal TYPE REF TO zcl_animal. CREATE OBJECT lo_animal TYPE zcl_dog. lo_animal-make_sound( ). " 汪汪 CREATE OBJECT lo_animal TYPE zcl_cat. lo_animal-make_sound( ). " 喵喵这里lo_animal的静态类型是ZCL_ANIMAL,但运
返回列表