Casten in het ABAP-programma

KLASSE a1 DEFINITIE.
 OPENBARE SECTIE.
 GEGEVENS: num1 TYPE i WAARDE 100.
 METHODEN:m1.
 EINDKLASSE.
 KLASSE a1 IMPLEMENTATIE.
 METHODE m1.
 SCHRIJF: 'a1:',getal1.
 EINDMETHODE.
 EINDKLASSE.
 DEFINITIE VAN KLASSE b1 ERFT VAN a1.
 OPENBARE SECTIE.
 METHODEN:m2, m1 HERDEFINITIE.
 EINDKLASSE.
 KLASSE b1 IMPLEMENTATIE.
 METHODE m1.
 getal1 = getal1.
 SCHRIJF: 'b1:',getal1.
 EINDMETHODE.
 METHODE m2.
 SCHRIJF: 'M2 in klasse b1'.
 EINDMETHODE.
 EINDKLASSE.
 START-VAN-SELECTIE.
 GEGEVENS: a TYPE REF NAAR a1.
 GEGEVENS: b TYPE REF NAAR b1.
 *gegevens: c type REF NAAR c1.
 ************************************************** *************** OBJECT MAKEN b.
 een = b.  "upcasting OPROEPMETHODE a->m1( ).
 *bel METHODE a->m2( ).  " we hebben geen toegang tot de eigen subklasse-methoden met behulp van superklasse ref.
 NIEUWE LIJN.
 b ?= een.  " down casting OPROEP METHODE b->m1( ).
 NIEUWE LIJN.
 OPROEP METHODE b->m2( ).
 ********************************************** *************** " fout null ref maak OBJECT a.
 b ?= een.  "down casting is nog steeds een dump-aanroep METHODE b->m1( ).
 ******************************************************* *************** OBJECT MAKEN
 POGING.
 b ?= een.  "ur heeft geprobeerd een 'NULL' objectreferentiedump CATCH cx_sy_move_cast_error te gebruiken.
 OPROEP METHODE b->m1( ).
 EINDE.
 ******************************************************* *************** OBJECT MAKEN
 OBJECT MAKEN b.
 POGING.
 b ?= een.
 VANGEN cx_sy_move_cast_error.
 OPROEP METHODE b->m1( ).
 bel METHODE b->m2( ).
 EINDE.
 KLASSE lcl_shape DEFINITIE.
 OPENBARE SECTIE.
 METHODEN tekenen.
 EINDKLASSE.
 KLASSE lcl_circle DEFINITIE ERFENIS VAN lcl_shape.
 OPENBARE SECTIE.
 METHODEN: teken HERDEFINITIE, calc_area.
 EINDKLASSE.
 KLASSE lcl_shape IMPLEMENTATIE.
 METHODE trekking.
 SCHRIJF :/ 'Elke vorm tekenen'.
 EINDMETHODE.
 EINDKLASSE.
 KLASSE lcl_circle IMPLEMENTATIE.
 METHODE trekking.
 SCHRIJF :/ 'Specifieke vorm tekenen: cirkel'.
 EINDMETHODE.
 METHODE calc_area.
 SCHRIJF :/ 'Gebied van Crcle = 2iiR'.
 EINDMETHODE.
 EINDKLASSE.
 START-VAN-SELECTIE.
 GEGEVENS: o_cir TYPE REF NAAR lcl_circle.
 OBJECT MAKEN o_cir.
 OPROEP METHODE o_cir->draw( ).  " roept de subklasse Draw() methode op CALL METHOD o_cir->calc_area( ).
 ULINE.
 "--------- Smalle cast (Upcast)---------------" DATA: o_shp TYPE REF NAAR lcl_shape.
 o_shp = o_cir.  " Smalle cast (Upcast) OPROEPMETHODE o_shp->draw().  " roept de subklasse Draw() methode "aanroep METHODE o_shp->calc_area() aan.  " compilatiefout ULINE.
 "---------- Verbreding Cast(Downcast) -----------" GEGEVENS: o_cir1 TYPE REF TO lcl_circle.
 " o_cir1 = o_shp.  " compilatiefout o_cir1 ?= o_shp.  " Verbreding cast (downcast) OPROEP METHODE o_cir1->draw().  " roept de subklasse Draw() methode CALL METHOD o_cir1->calc_area() aan.
 KLASSE a1 DEFINITIE.
 OPENBARE SECTIE.
 GEGEVENS: num1 TYPE i WAARDE 100.
 METHODEN:m1.
 EINDKLASSE.
 KLASSE a1 IMPLEMENTATIE.
 METHODE m1.
 SCHRIJF: 'a1:',getal1.
 EINDMETHODE.
 EINDKLASSE.
 DEFINITIE VAN KLASSE b1 ERFT VAN a1.
 OPENBARE SECTIE.
 METHODEN:m2, m1 HERDEFINITIE.
 EINDKLASSE.
 KLASSE b1 IMPLEMENTATIE.
 METHODE m1.
 getal1 = getal1.
 SCHRIJF: 'b1:',getal1.
 EINDMETHODE.
 METHODE m2.
 SCHRIJF: 'M2 in klasse b1'.
 EINDMETHODE.
 EINDKLASSE.
 START-VAN-SELECTIE.
 GEGEVENS: ouder TYPE REF NAAR a1.
 GEGEVENS: kind TYPE REF NAAR b1.
 *gegevens: c type REF NAAR c1.
 ********************************************** *********** MAAK OBJECT kind.
 ouder = kind.  "upcasting OPROEPMETHODE ouder->m1( ).
 OPROEP METHODE kind->m1( ).
 OPROEP METHODE kind->m2( ).
 *bel METHODE a->m2( ).  " we hebben geen toegang tot de eigen subklasse-methoden met behulp van superklasse ref.
 NIEUWE LIJN.
 kind ?= ouder.  " down casting OPROEP METHODE kind->m1( ).
 NIEUWE LIJN.
 OPROEP METHODE kind->m2( ).
 ********************************************** *************** *" fout null ref *create OBJECT a.
 *b ?= een.  "down casting is nog steeds een dump *call METHOD b->m1( ).
 ********************************************** *************** * MAAK OBJECT a.
 POGING.
 b ?= een.  "ur heeft geprobeerd een 'NULL' objectreferentiedump CATCH cx_sy_move_cast_error te gebruiken.
 OPROEP METHODE b->m1( ).
 EINDE.
 ********************************************** *************** * MAAK OBJECT a.
 OBJECT MAKEN b.
 POGING.
 b ?= een.
 VANGEN cx_sy_move_cast_error.
 OPROEP METHODE b->m1( ).
 bel METHODE b->m2( ).
 EINDE.
 ******** Unieke waarden****************** GEGEVENS: lv_string TYPE-tekenreeks, lv_string2 TYPE-reeks, lv_string_final TYPE-reeks.
 TYPES: BEGIN VAN ty_data, auth TYPE c, EINDE VAN ty_data.
 GEGEVENS: ls_user TYPE ty_data, ls_user2 TYPE ty_data, lt_user2 TYPE TABEL VAN ty_data, lt_user TYPE TABEL VAN ty_data.
 lv_string = 'a,b,c,a'.
 lv_string2 = 'd,b,c,a'.
 SPLIT lv_string AT ',' IN TABEL lt_user.
 SPLIT lv_string2 AT ',' IN TABEL lt_user2.
 LUS BIJ lt_user2 VELDSYMBOOL TOEKENNEN ( ).
 INSERT IN TABEL lt_user.
 EINDLOOP.
 SORT lt_user DOOR auth.
 VERWIJDER AANVULLENDE DUPLICATES VAN lt_user VERGELIJKING auth.
 ALS sy-subrc = 0.
 LUS BIJ lt_user TOEKENNING VAN VELD-SYMBOOL( ).
 ALS lv_string_final INITIAL IS.
 lv_string_final = -aut.
 ANDERS.
 CONCATENATE lv_string_final -auth INTO lv_string_final GESCHEIDEN DOOR ','.
 STOP ALS.
 EINDLOOP.
 STOP ALS.

 

laat een reactie achter

Deze site gebruikt Akismet om spam te verminderen. Ontdek hoe uw reactiegegevens worden verwerkt.