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.

私は過去に他のオブジェクトタイプとのダウンキャストに成功しました-2つのクラスを互換性のないものにする可能性のあるZPARENTまたはZCHILDで何を探すべきか考えている人はいますか?

現在、ZCHILDには追加のメソッドが1つしかないため、スーパークラスに追加すると、クラスの抽象化が破られるため、私はそれほど熱心ではありません。

4

1 に答える 1

2

私はabapでオブジェクト指向コーディングをしませんでした。あまりabapプログラミングはありません。しかし、これは典型的なooシナリオだと思います。だからここに私の推測があります。

オブジェクトをキャストできないものにキャストすることはできません。
親クラスのインスタンスを作成しました。これで、子クラスには、親クラスにはない「myCandy」のプロパティがあります。したがって、オブジェクトにはこのプロパティがありません。そして、あなたはそれを子供にキャストします。「myCandy」プロパティを要求(または変更)するときに、実行時間が遅くなるとどうなりますか?何もできません。したがって、このキャストは許可されません。

キャストは、オブジェクトが子としてインスタンス化され、次に親オブジェクトにキャストされてから、再び子オブジェクトに戻された場合にのみ可能です。子は親が持っているすべてのものを持っているので、このパスに問題はありません。

于 2009-10-29T20:11:00.743 に答える