ABAP 프로그램 캐스팅

클래스 a1 정의.
 공개 섹션.
 데이터: num1 유형 i 값 100.
 방법:m1.
 ENDCLASS.
 클래스 a1 구현.
 방법 m1.
 쓰기: 'a1:',num1.
 최종 방법.
 ENDCLASS.
 a1에서 상속되는 클래스 b1 정의.
 공개 섹션.
 방법:m2, m1 재정의.
 ENDCLASS.
 클래스 b1 구현.
 방법 m1.
 숫자1 = 숫자1 .
 쓰기: 'b1:',num1.
 최종 방법.
 방법 m2.
 쓰기: '클래스 b2의 M1'.
 최종 방법.
 ENDCLASS.
 선택 시작.
 데이터: a1에 대한 유형 참조.
 데이터: b 유형 REF TO b1.
 *데이터: c 유형 REF TO c1.
 ************************************************** ************** 객체 생성 b.
 ㄱ = ㄴ.  "업캐스팅 CALL METHOD a->m1( ).
 * METHOD a->m2( )를 호출합니다.  " 슈퍼 클래스 ref를 사용하여 자체 서브 클래스 메소드에 액세스할 수 없습니다.
 NEW-LINE.
 b ?= 가.  " 다운 캐스팅 CALL METHOD b->m1( ).
 NEW-LINE.
 호출 방법 b->m2( ).
 ************************************************** *************** "오류 null ref create OBJECT a.
 b ?= 가.  "다운 캐스팅은 여전히 ​​덤프 호출 METHOD b->m1( )을 제공합니다.
 ************************************************** *************** 개체 만들기 a.
 노력하다.
 b ?= 가.  "ur는 'NULL' 개체 참조 덤프 CATCH cx_sy_move_cast_error를 사용하려고 했습니다.
 호출 방법 b->m1( ).
 종료.
 ************************************************** *************** 개체 만들기 a.
 객체 생성 b.
 노력하다.
 b ?= 가.
 CATCH cx_sy_move_cast_error.
 호출 방법 b->m1( ).
 METHOD b->m2( )를 호출합니다.
 종료.
 클래스 lcl_shape 정의.
 공개 섹션.
 방법 무승부.
 ENDCLASS.
 lcl_shape에서 상속되는 클래스 lcl_circle 정의.
 공개 섹션.
 방법: REDEFINITION, calc_area를 그립니다.
 ENDCLASS.
 클래스 lcl_shape 구현.
 방법 무승부.
 WRITE :/ '모든 모양 그리기'.
 최종 방법.
 ENDCLASS.
 클래스 lcl_circle 구현.
 방법 무승부.
 WRITE :/ '특정 모양 그리기: 원'.
 최종 방법.
 방법 calc_area.
 WRITE :/ 'Crcle의 면적 = 2iiR'.
 최종 방법.
 ENDCLASS.
 선택 시작.
 데이터: o_cir TYPE REF TO lcl_circle.
 객체 생성 o_cir.
 호출 방법 o_cir->draw().  " 하위 클래스 Draw() 메서드 CALL METHOD o_cir->calc_area( )를 호출합니다.
 ULINE.
 "------------ 좁은 캐스팅(업캐스트)---------------" 데이터: o_shp TYPE REF TO lcl_shape.
 o_shp = o_cir.  " 좁은 캐스트(업캐스트) CALL METHOD o_shp->draw( ).  " METHOD o_shp->calc_area( ) 를 호출하는 하위 클래스 Draw() 메서드를 호출합니다.  " 컴파일 오류 ULINE.
 "------------ 확대 캐스팅(다운캐스트) -----------" 데이터: o_cir1 TYPE REF TO lcl_circle.
 " o_cir1 = o_shp.  " 컴파일 오류 o_cir1 ?= o_shp.  " 확대 캐스트(다운캐스트) CALL METHOD o_cir1->draw( ).  " 하위 클래스 Draw() 메서드 CALL METHOD o_cir1->calc_area( )를 호출합니다.
 클래스 a1 정의.
 공개 섹션.
 데이터: num1 유형 i 값 100.
 방법:m1.
 ENDCLASS.
 클래스 a1 구현.
 방법 m1.
 쓰기: 'a1:',num1.
 최종 방법.
 ENDCLASS.
 a1에서 상속되는 클래스 b1 정의.
 공개 섹션.
 방법:m2, m1 재정의.
 ENDCLASS.
 클래스 b1 구현.
 방법 m1.
 숫자1 = 숫자1 .
 쓰기: 'b1:',num1.
 최종 방법.
 방법 m2.
 쓰기: '클래스 b2의 M1'.
 최종 방법.
 ENDCLASS.
 선택 시작.
 데이터: a1에 대한 상위 유형 REF.
 데이터: b1에 대한 아동 유형 참조.
 *데이터: c 유형 REF TO c1.
 ************************************************** ************** CREATE OBJECT 자식.
 부모 = 자식.  "CALL METHOD parent->m1( )을 업캐스팅합니다.
 호출 방법 자식->m1( ).
 호출 방법 자식->m2( ).
 * METHOD a->m2( )를 호출합니다.  " 슈퍼 클래스 ref를 사용하여 자체 서브 클래스 메소드에 액세스할 수 없습니다.
 NEW-LINE.
 자식 ?= 부모.  " 다운 캐스팅 CALL METHOD 자식->m1( ).
 NEW-LINE.
 호출 방법 자식->m2( ).
 ************************************************** **************** *" 오류 null ref *create OBJECT a.
 *b ?= 에이.  "다운 캐스팅은 여전히 ​​덤프를 제공합니다. *call METHOD b->m1().
 *********************************************** **************** * 객체 생성 a.
 노력하다.
 b ?= 가.  "ur는 'NULL' 개체 참조 덤프 CATCH cx_sy_move_cast_error를 사용하려고 했습니다.
 호출 방법 b->m1( ).
 종료.
 *********************************************** **************** * 객체 생성 a.
 객체 생성 b.
 노력하다.
 b ?= 가.
 CATCH cx_sy_move_cast_error.
 호출 방법 b->m1( ).
 METHOD b->m2( )를 호출합니다.
 종료.
 ******** 고유 값****************** DATA : lv_string TYPE 문자열, lv_string2 TYPE 문자열, lv_string_final TYPE 문자열.
 유형: ty_data의 시작, 인증 유형 c, ty_data의 끝.
 데이터: ls_user 유형 ty_data, ls_user2 유형 ty_data, lt_user2 유형 ty_data의 테이블, lt_user 유형 ty_data의 테이블.
 lv_string = 'a,b,c,a'.
 lv_string2 = 'd,b,c,a'.
 SPLIT lv_string AT ',' INTO TABLE lt_user.
 SPLIT lv_string2 AT ',' INTO TABLE lt_user2.
 lt_user2에서 LOOP FIELD-SYMBOL( ).
 끼워 넣다 INTO TABLE lt_user.
 엔드루프.
 SORT lt_user BY 인증.
 인증을 비교하는 lt_user에서 인접 중복을 삭제합니다.
 sy-subrc = 0인 경우.
 lt_user ASSIGNING FIELD-SYMBOL( ).
 lv_string_final이 초기인 경우.
 lv_string_final = -인증.
 또 다른.
 연결 lv_string_final -auth INTO lv_string_final SEPARATED BY ','.
 ENDIF.
 엔드루프.
 ENDIF.

 

코멘트를 남겨주세요

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터 처리 방법 알아보기.