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.
過去に他のオブジェクトタイプでダウンキャストに成功しました-2つのクラスの互換性を失わせる可能性のあるZPARENTまたはZCHILDで何を探すべきか考えていますか?
現在、ZCHILDには追加のメソッドが1つしかありません。スーパークラスに追加すると、クラスの抽象化が破壊されるため、私はそれをやりたくありません。
解決
私はabapでオブジェクト指向コーディングをしませんでした。プログラミングはほとんどありません。しかし、これは典型的なオブジェクト指向のシナリオだと思います。これが私の推測です。
オブジェクトをそれができないものにキャストすることはできません。
親クラスのインスタンスを作成しました。これで、子クラスのプロパティは" myCandy"になります。親クラスにはないこと。そのため、オブジェクトにはこのプロパティがありません。そして、それを子供にキャストします。 " myCandy"を要求する(または変更する)ときの実行時間が悪い財産?何もできません。したがって、このキャストは許可されません。
キャストは、オブジェクトが子としてインスタンス化され、その後親オブジェクトにキャストされ、その後再び子オブジェクトに戻された場合にのみ可能です。子には親のすべてが含まれているため、このパスに問題はありません。
所属していません StackOverflow