2009-10-22 12 views
1

Je crée une classe qui hérite d'une classe parente avec une instanciation protégée. La super classe a une méthode statique qui fournit une instance de la classe.Quelles sont les causes de MOVE_CAST_ERROR lors de la conversion d'un objet de référence dans ABAP?

Le code suivant provoque une erreur d'exécution MOVE_CAST_ERROR:

data: o_child type ref to zchild. 

o_child ?= zparent=>provide_instance(). 

J'ai aussi essayé:

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

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

J'ai avec succès vers le bas-casted avec d'autres types d'objets dans le passé - ce que quelqu'un avoir une idée de ce qu'il faut rechercher dans ZPARENT ou ZCHILD qui peut rendre les deux classes incompatibles?

Actuellement, ZCHILD ne dispose que d'une méthode supplémentaire qui, si elle était ajoutée à la super classe, briserait l'abstraction de la classe, donc je ne suis pas très désireux de le faire.

Répondre

2

Je n'ai effectué aucun codage orienté objet dans abap. Pas beaucoup de programmation abap. Mais je pense que c'est un scénario oo typique. Alors voici ma conjecture.

Vous ne pouvez pas placer un objet dans ce qu'il n'est pas.
Vous avez créé une instance de la classe parente. Maintenant, la classe enfant a la propriété de "myCandy" que la classe parente n'a pas. Donc, votre objet n'a pas cette propriété. Et puis tu l'as jeté à l'enfant. Qu'est-ce que les pauvres doivent faire quand vous demandez (ou changez) la propriété "myCandy"? Cela ne peut rien faire. Donc, il interdit cette distribution.

La conversion n'est possible que si l'objet a été instancié en tant qu'enfant, puis a été casté vers l'objet parent, puis de nouveau vers l'objet enfant. L'enfant a tout ce que le parent a donc il n'y a pas de problème avec ce chemin.

+0

Merci - dans ce cas, l'enfant avait une méthode supplémentaire (je ne me souviens pas si il y avait de nouveaux attributs.) Je vais devoir me le prouver un jour, mais pour l'instant je vais accepter votre mot :RÉ – Esti