在ABAP中向下转换参考对象时导致MOVE_CAST_ERROR的原因是什么?
题
我正在创建一个继承自具有受保护实例化的父类的类。超类有一个静态方法,它提供了类的实例。
以下代码导致运行时错误 MOVE_CAST_ERROR
:
data: o_child type ref to zchild.
o_child ?= zparent=>provide_instance( ).
我也尝试过:
data: o_parent type ref to zparent,
o_child type ref to zchild.
o_parent = zparent=>provide_instance( ).
o_child ?= o_parent.
我过去已经成功地使用了其他对象类型 - 是否有人知道在ZPARENT或ZCHILD中寻找什么可能会使这两个类不兼容?
目前ZCHILD只有一个额外的方法,如果添加到超类中会破坏类的抽象,所以我并不热衷于这样做。
解决方案
我没有在abap中进行任何面向对象的编码。也没有太多的节目。但我认为这是一个典型的oo场景。所以这是我的猜测。
你不能将一个对象转换为它不是什么 您已创建父类的实例。现在,子类具有“myCandy”属性。父类没有。所以你的对象没有这个属性。然后你把它扔给孩子。当你要求(或改变)“myCandy”时,糟糕的运行时间必须做什么?属性?它无能为力。所以它不允许这个演员。
只有在将对象实例化为子对象并且然后将其转换为父对象然后再返回到子对象时,才可以进行强制转换。孩子拥有父母所拥有的一切,所以这条道路没有问题。
不隶属于 StackOverflow