代码之家  ›  专栏  ›  技术社区  ›  Esti

在ABAP中向下转换引用对象时,是什么导致了MOVE_CAST_错误?

  •  1
  • Esti  · 技术社区  · 16 年前

    以下代码导致运行时错误 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.
    

    目前ZCHILD只有一个额外的方法,如果添加到超类中,它将破坏类的抽象,因此我不太想这样做。

    1 回复  |  直到 5 年前
        1
  •  2
  •   Igal Serban    16 年前

    我没有在abap中进行任何面向对象的编码。也没有太多的abap编程。但我认为这是一个典型的oo场景。这是我的猜测。


    您已创建父类的实例。现在,子类具有父类没有的“myCandy”属性。所以你的对象没有这个属性。然后你把它扔给孩子。当您请求(或更改)“myCandy”属性时,糟糕的运行时需要做什么?它无能为力。所以它不允许这个演员。

    只有将对象实例化为子对象,然后将其强制转换为父对象,然后再重新转换为子对象,才能进行强制转换。子对象拥有父对象所拥有的一切,因此此路径没有问题。