2

我正在创建一个从具有受保护实例化的父类继承的类。超类有一个提供类实例的静态方法。

以下代码导致运行时错误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只有一个额外的方法,如果添加到超类中会破坏类的抽象,所以我不太热衷于这样做。

4

1 回答 1

2

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

你不能将一个对象投射到它不是的东西上。
您已经创建了父类的一个实例。现在子类具有父类没有的“myCandy”属性。所以你的对象没有这个属性。然后你把它扔给孩子。当您要求(或更改)“myCandy”属性时,糟糕的运行时间必须做什么?它什么也做不了。所以它不允许这个演员表。

只有当对象被实例化为子对象,然后它被强制转换为父对象,然后再返回给子对象时,才能进行强制转换。孩子拥有父母拥有的一切,所以这条路没有问题。

于 2009-10-29T20:11:00.743 回答