Casting w programie ABAP

DEFINICJA KLASY a1.
 SEKCJA PUBLICZNA.
 DANE: num1 TYP i WARTOŚĆ 100.
 METODY:m1.
 KLASA KOŃCOWA.
 REALIZACJA KLASY a1.
 METODA m1.
 NAPISZ: 'a1:',num1.
 METODA KOŃCOWA.
 KLASA KOŃCOWA.
 KLASA b1 DEFINICJA DZIEDZICZĄCA Z a1.
 SEKCJA PUBLICZNA.
 METODY:m2, m1 PRZEDEFINIOWANIE.
 KLASA KOŃCOWA.
 WDROŻENIE KLASY b1.
 METODA m1.
 numer1 = numer1 .
 ZAPISZ: 'b1:',num1.
 METODA KOŃCOWA.
 METODA m2.
 NAPISZ: 'M2 w klasie b1'.
 METODA KOŃCOWA.
 KLASA KOŃCOWA.
 POCZĄTEK SELEKCJI.
 DANE: a TYP ODNIESIENIE DO a1.
 DANE: b TYP ODNIESIENIE DO b1.
 *dane: c typ REF TO c1.
 ************************************************** ************** UTWÓRZ OBIEKT b.
 a = b.  "upcasting METODA WYWOŁANIA a->m1( ).
 *wywołaj METODA a->m2( ).  " nie możemy uzyskać dostępu do własnych metod podklas przy użyciu superklasy ref.
 NOWA LINIA.
 b?=  " down casting CALL METHOD b->m1( ).
 NOWA LINIA.
 METODA WYWOŁANIA b->m2( ).
 ************************************************** *************** " błąd null ref utwórz OBIEKT
 b?=  "odrzucanie w dół nadal daje wywołanie zrzutu METODA b->m1( ).
 ************************************************** *************** UTWÓRZ OBIEKT
 PRÓBOWAĆ.
 b?=  „ur próbował użyć zrzutu odniesienia obiektu „NULL” CATCH cx_sy_move_cast_error.
 METODA WYWOŁANIA b->m1( ).
 KONIEC.
 ************************************************** *************** UTWÓRZ OBIEKT
 UTWÓRZ OBIEKT
 PRÓBOWAĆ.
 b?=
 CATCH cx_sy_move_cast_error.
 METODA WYWOŁANIA b->m1( ).
 zadzwoń do METODY b->m2( ).
 KONIEC.
 KLASA lcl_shape DEFINICJA.
 SEKCJA PUBLICZNA.
 METODY losowanie.
 KLASA KOŃCOWA.
 KLASA lcl_circle DEFINICJA DZIEDZICZĄCA Z lcl_shape.
 SEKCJA PUBLICZNA.
 METODY: narysuj REDEFINITION, calc_area.
 KLASA KOŃCOWA.
 WDROŻENIE KLASA lcl_shape.
 METODA losowanie.
 NAPISZ :/ 'Rysowanie dowolnego kształtu'.
 METODA KOŃCOWA.
 KLASA KOŃCOWA.
 WDROŻENIE KLASA lcl_circle.
 METODA losowanie.
 WRITE :/ 'Rysowanie konkretnego kształtu: Okrąg'.
 METODA KOŃCOWA.
 METODA calc_area.
 NAPISZ :/ 'Powierzchnia Crcle = 2iiR'.
 METODA KOŃCOWA.
 KLASA KOŃCOWA.
 POCZĄTEK SELEKCJI.
 DANE : o_cir TYP ODNIESIENIE DO lcl_circle.
 UTWÓRZ OBIEKT o_cir.
 METODA WYWOŁANIA o_cir->draw( ).  " wywołuje podklasę metody Draw() METODA WYWOŁANIA o_cir->calc_area().
 ULINE.
 „--------- Wąskie rzutowanie (Upcast)---------------” DANE : o_shp TYP ODNIESIENIE DO lcl_shape.
 o_shp = o_cir.  " Wąskie rzutowanie (Upcast) METODA WYWOŁANIA o_shp->draw( ).  "wywołuje podklasę metody Draw() "wywołaj METODĘ o_shp->calc_area() .  " błąd kompilacji ULINE.
 "---------- Rozszerzenie rzutowania (odrzucenie) -----------" DANE : o_cir1 TYP ODNIESIENIE DO lcl_circle.
 " o_cir1 = o_shp.  " błąd kompilacji o_cir1 ?= o_shp.  " Rozszerzanie rzutowania(Downcast) METODA WYWOŁANIA o_cir1->draw( ).  " wywołuje podklasę metody Draw() METODA WYWOŁANIA o_cir1->calc_area().
 DEFINICJA KLASY a1.
 SEKCJA PUBLICZNA.
 DANE: num1 TYP i WARTOŚĆ 100.
 METODY:m1.
 KLASA KOŃCOWA.
 REALIZACJA KLASY a1.
 METODA m1.
 NAPISZ: 'a1:',num1.
 METODA KOŃCOWA.
 KLASA KOŃCOWA.
 KLASA b1 DEFINICJA DZIEDZICZĄCA Z a1.
 SEKCJA PUBLICZNA.
 METODY:m2, m1 PRZEDEFINIOWANIE.
 KLASA KOŃCOWA.
 WDROŻENIE KLASY b1.
 METODA m1.
 numer1 = numer1 .
 ZAPISZ: 'b1:',num1.
 METODA KOŃCOWA.
 METODA m2.
 NAPISZ: 'M2 w klasie b1'.
 METODA KOŃCOWA.
 KLASA KOŃCOWA.
 POCZĄTEK SELEKCJI.
 DANE: rodzic TYP REF TO a1.
 DANE: dziecko TYP ODNIESIENIE DO b1.
 *dane: c typ REF TO c1.
 ************************************************** ************** UTWÓRZ OBIEKT dziecko.
 rodzic = dziecko.  "upcasting CALL METHOD parent->m1( ).
 METODA WYWOŁANIA dziecko->m1( ).
 METODA WYWOŁANIA dziecko->m2( ).
 *wywołaj METODA a->m2( ).  " nie możemy uzyskać dostępu do własnych metod podklas przy użyciu superklasy ref.
 NOWA LINIA.
 dziecko ?= rodzic.  rzucanie w dół CALL METHOD child->m1( ).
 NOWA LINIA.
 METODA WYWOŁANIA dziecko->m2( ).
 ************************************************** **************** *" error null ref *utwórz OBIEKT
 *b?=  "odrzucanie w dół nadal daje zrzut *wywołaj METODĘ b->m1( ).
 ************************************************** **************** * UTWÓRZ OBIEKT
 PRÓBOWAĆ.
 b?=  „ur próbował użyć zrzutu odniesienia obiektu „NULL” CATCH cx_sy_move_cast_error.
 METODA WYWOŁANIA b->m1( ).
 KONIEC.
 ************************************************** **************** * UTWÓRZ OBIEKT
 UTWÓRZ OBIEKT
 PRÓBOWAĆ.
 b?=
 CATCH cx_sy_move_cast_error.
 METODA WYWOŁANIA b->m1( ).
 zadzwoń do METODY b->m2( ).
 KONIEC.
 ******** Unikalne wartości****************** DANE : lv_string TYPE ciąg, lv_string2 TYPE ciąg, lv_string_final TYPE ciąg.
 TYPY: BEGIN OF ty_data, auth TYPE c, END OF ty_data.
 DANE: ls_user TYP ty_data, ls_user2 TYP ty_data, lt_user2 TYP TABELA ty_data, lt_user TYP TABELA ty_data.
 lv_string = 'a,b,c,a'.
 lv_string2 = 'd,b,c,a'.
 SPLIT lv_string AT ',' DO TABELI lt_user.
 PODZIEL lv_string2 AT ',' DO TABELI lt_user2.
 PĘTLA W lt_user2 PRZYPISANIE POLA-SYMBOL( ).
 WSTAWIĆ DO TABELI lt_user.
 PĘTLA KOŃCOWA.
 SORTUJ lt_user WG Uwierz.
 USUŃ SĄSIEDNIE DULIKATY Z lt_user PORÓWNANIE auth.
 JEŚLI sy-subrc = 0.
 PĘTLA W lt_user PRZYPISANIE SYMBOL POLA ( ).
 JEŚLI lv_string_final JEST POCZĄTKOWY.
 lv_string_final = -uwierz.
 W PRZECIWNYM RAZIE.
 ZŁĄCZ.lv_string_final -auth DO lv_string_final ODDZIELONE ','.
 ENDIF.
 PĘTLA KOŃCOWA.
 ENDIF.

 

Zostaw komentarz

Ta strona używa Akismet do redukcji spamu. Dowiedz się, jak przetwarzane są dane komentarza.