ABAP에서 기준 객체를 다운 캐스팅 할 때 Move_cast_error의 원인은 무엇입니까?

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

  •  05-07-2019
  •  | 
  •  

문제

보호 된 인스턴스화로 학부모 수업에서 상속되는 수업을 만들고 있습니다. 슈퍼 클래스에는 클래스 인스턴스를 제공하는 정적 메소드가 있습니다.

다음 코드는 런타임 오류를 유발합니다 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에는 하나의 추가 방법 만 있습니다. 슈퍼 클래스에 추가하면 클래스의 추상화를 중단 할 수 있으므로 그렇게하고 싶어하지 않습니다.

도움이 되었습니까?

해결책

ABAP에서 객체 지향 코딩을하지 않았습니다. 많은 ABAP 프로그래밍. 그러나 나는 이것이 일반적인 OO 시나리오라고 생각합니다. 그래서 여기 내 추측이 있습니다.

당신은 그것이 아닌 것에 물체를 던질 수 없습니다.
부모 클래스의 인스턴스를 만들었습니다. 이제 아동 계급에는 부모 계급에없는 "Mycandy"의 속성이 있습니다. 따라서 객체에는이 속성이 없습니다. 그리고 당신은 그것을 아이에게 캐스팅합니다. "Mycandy"속성을 요청하거나 변경할 때 불쌍한 런 타임은 무엇을해야합니까? 아무것도 할 수 없습니다. 그래서 그것은이 캐스트를 허용하지 않습니다.

캐스트는 물체가 아이로 인스턴스화 된 후 부모 대상으로 캐스팅 된 다음 다시 어린이 물체로 돌아온 경우에만 가능합니다. 아이는 부모가 가진 모든 것을 가지고 있으므로이 길에 아무런 문제가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top