Was sind die Ursachen MOVE_CAST_ERROR wenn ein Referenzobjekt in ABAP Down-Casting?

StackOverflow https://stackoverflow.com/questions/1610293

  •  05-07-2019
  •  | 
  •  

Frage

Ich erstelle eine Klasse, die von einer übergeordneten Klasse mit geschützter Instanziierung erbt. Die Super-Klasse hat eine statische Methode, die eine Instanz der Klasse enthält.

Der folgende Code führt zu einem Laufzeitfehler MOVE_CAST_ERROR:

data: o_child type ref to zchild.

o_child ?= zparent=>provide_instance( ).

Ich habe auch versucht:

data: o_parent type ref to zparent,
      o_child  type ref to zchild.

o_parent = zparent=>provide_instance( ).
o_child  ?= o_parent.

Ich habe erfolgreich mit anderen Objekttypen in der Vergangenheit nach unten gegossen - hat jemand eine Idee, was in ZPARENT oder ZCHILD zu suchen, dass die beiden Klassen unvereinbar machen kann?

Zur Zeit ZCHILD nur eine zusätzliche Methode hat, die die Superklasse, wenn hinzugefügt würde die Abstraktion der Klasse brechen, so dass ich nicht so scharf, es zu tun.

War es hilfreich?

Lösung

Ich habe noch keine objektorientierte Codierung in abap. Noch viel abap Programmierung. Aber ich denke, dass dies ein typisches Szenario oo. So, hier ist meine Vermutung.

Sie können nicht ein Objekt werfen, was es nicht ist.
Sie haben eine Instanz der übergeordneten Klasse erstellt. Nun ist die Kind-Klasse hat die Eigenschaft „myCandy“, dass die Elternklasse nicht haben. Also Ihr Objekt haben diese Eigenschaft nicht. Und dann werfen Sie es auf das Kind. Was die schlechte Laufzeit zu tun hat, wenn Sie (oder Änderung) die „myCandy“ Eigenschaft fragen? Es kann nichts tun. So ist es diese Besetzung nicht zulassen.

Die Besetzung ist nur möglich, wenn das Objekt als das Kind instanziiert wurde und dann wurde es auf das übergeordnete Objekt gegossen und dann wieder zurück auf das Kind-Objekt. Das Kind hat alles, was die Eltern hat, so gibt es kein Problem mit diesem Weg.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top