Casting no Programa ABAP

CLASE a1 DEFINICIÓN.
 SECCIÓN PÚBLICA.
 DATOS: núm1 TIPO i VALOR 100.
 MÉTODOS: m1.
 CLASE FINAL.
 IMPLEMENTACIÓN DA CLASE a1.
 MÉTODO m1.
 ESCRIBE: 'a1:',núm1.
 MÉTODO FINAL.
 CLASE FINAL.
 CLASE b1 DEFINICIÓN HERDANZA DE a1.
 SECCIÓN PÚBLICA.
 MÉTODOS: REDEFINICIÓN m2, m1.
 CLASE FINAL.
 IMPLEMENTACIÓN DA CLASE b1.
 MÉTODO m1.
 núm1 = núm1.
 ESCRIBE: 'b1:',núm1.
 MÉTODO FINAL.
 MÉTODO m2.
 ESCRIBE: 'M2 na clase b1'.
 MÉTODO FINAL.
 CLASE FINAL.
 INICIO DA SELECCIÓN.
 DATOS: a TIPO REF A a1.
 DATOS: b TIPO REF A b1.
 *datos: tipo c REF A c1.
 **************************************************** ************** CREAR OBXECTO b.
 a = b.  "upcasting CALL METHOD a->m1().
 *chamar MÉTODO a->m2().  "non podemos acceder aos propios métodos de subclase usando a ref.
 NEW-LINE.
 b ?= a.  " MÉTODO DE CHAMADAS de baixada b->m1( ).
 NEW-LINE.
 MÉTODO DE CONVOCATORIA b->m2().
 **************************************************** *************** " error null ref crear OBXECTO a.
 b ?= a.  "abaixo aínda está dando a chamada de volcado MÉTODO b->m1().
 **************************************************** *************** CREAR OBXECTO a.
 TENTAR.
 b ?= a.  "Intentaches usar un volcado de referencia de obxecto 'NULL' CATCH cx_sy_move_cast_error.
 MÉTODO DE CONVOCATORIA b->m1().
 ENTRADA.
 **************************************************** *************** CREAR OBXECTO a.
 CREAR OBXECTO b.
 TENTAR.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 MÉTODO DE CONVOCATORIA b->m1().
 chamar MÉTODO b->m2().
 ENTRADA.
 CLASE lcl_shape DEFINICIÓN.
 SECCIÓN PÚBLICA.
 MÉTODOS SORTEO.
 CLASE FINAL.
 CLASE lcl_circle DEFINICIÓN HERDANDO DE lcl_shape.
 SECCIÓN PÚBLICA.
 MÉTODOS: debuxar REDEFINICIÓN, calc_area.
 CLASE FINAL.
 IMPLEMENTACIÓN DE CLASE lcl_shape.
 MÉTODO sorteo.
 ESCRIBE :/ 'Debuxando calquera forma'.
 MÉTODO FINAL.
 CLASE FINAL.
 IMPLEMENTACIÓN DE CLASE lcl_circle.
 MÉTODO sorteo.
 ESCRIBE :/ 'Debuxo de forma específica: Círculo'.
 MÉTODO FINAL.
 MÉTODO calc_area.
 ESCRIBE :/ 'Área de Crcle = 2iiR'.
 MÉTODO FINAL.
 CLASE FINAL.
 INICIO DA SELECCIÓN.
 DATOS: o_cir TIPO REF A lcl_circle.
 CREAR OBXECTO o_cir.
 MÉTODO DE CHAMA o_cir->draw().  " chama ao método Draw() da subclase CALL METHOD o_cir->calc_area( ).
 ULINE.
 "--------- Cast estreito (upcast)---------------" DATOS: o_shp TIPO REF PARA lcl_shape.
 o_shp = o_cir.  " Método de chamada estreito (upcast) o_shp->draw().  " chama ao método Draw() da subclase "chama a METODO o_shp->calc_area() .  " erro de compilación ULINE.
 "---------- Ampliación do reparto (descenso) -----------" DATOS: o_cir1 TIPO REF A lcl_circle.
 " o_cir1 = o_shp.  " erro de compilación o_cir1 ?= o_shp.  " MÉTODO DE CHAMA Ampliando Cast(Downcast) o_cir1->draw().  " chama ao método Draw() da subclase CALL METHOD o_cir1->calc_area( ).
 CLASE a1 DEFINICIÓN.
 SECCIÓN PÚBLICA.
 DATOS: núm1 TIPO i VALOR 100.
 MÉTODOS: m1.
 CLASE FINAL.
 IMPLEMENTACIÓN DA CLASE a1.
 MÉTODO m1.
 ESCRIBE: 'a1:',núm1.
 MÉTODO FINAL.
 CLASE FINAL.
 CLASE b1 DEFINICIÓN HERDANZA DE a1.
 SECCIÓN PÚBLICA.
 MÉTODOS: REDEFINICIÓN m2, m1.
 CLASE FINAL.
 IMPLEMENTACIÓN DA CLASE b1.
 MÉTODO m1.
 núm1 = núm1.
 ESCRIBE: 'b1:',núm1.
 MÉTODO FINAL.
 MÉTODO m2.
 ESCRIBE: 'M2 na clase b1'.
 MÉTODO FINAL.
 CLASE FINAL.
 INICIO DA SELECCIÓN.
 DATOS: pai TIPO REF A a1.
 DATOS: infantil TIPO REF A b1.
 *datos: tipo c REF A c1.
 **************************************************** ************** CREAR OBXECTO fillo.
 pai = fillo.  "upcasting CALL METHOD parent->m1().
 MÉTODO DE CHAMA fillo->m1().
 MÉTODO DE CHAMA fillo->m2().
 *chamar MÉTODO a->m2().  "non podemos acceder aos propios métodos de subclase usando a ref.
 NEW-LINE.
 fillo ?= pai.  " downcast CALL METODO fillo->m1( ).
 NEW-LINE.
 MÉTODO DE CHAMA fillo->m2().
 **************************************************** **************** *" error null ref *crear OBXECT a.
 *b ?= a.  "lanzando aínda o seu vertedoiro dando *chamada a MÉTODO b->m1().
 **************************************************** **************** * CREAR OBXECTO a.
 TENTAR.
 b ?= a.  "Intentaches usar un volcado de referencia de obxecto 'NULL' CATCH cx_sy_move_cast_error.
 MÉTODO DE CONVOCATORIA b->m1().
 ENTRADA.
 **************************************************** **************** * CREAR OBXECTO a.
 CREAR OBXECTO b.
 TENTAR.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 MÉTODO DE CONVOCATORIA b->m1().
 chamar MÉTODO b->m2().
 ENTRADA.
 ******** Valores únicos******************** DATOS : lv_string TYPE string, lv_string2 TYPE string, lv_string_final TYPE string.
 TIPOS: BEGIN OF ty_data, auth TYPE c, END OF ty_data.
 DATOS: ls_user TYPE ty_data, ls_user2 TYPE ty_data, lt_user2 TYPE TABLE OF ty_data, lt_user TYPE TABLE OF ty_data.
 lv_string = 'a,b,c,a'.
 lv_string2 = 'd,b,c,a'.
 SPLIT lv_string AT ',' INTO TABLE lt_user.
 DIVIDIR lv_string2 EN ',' NA TÁBOA lt_user2.
 LOOP AT lt_user2 ASIGNANDO SÍMBOLO DE CAMPO( ).
 INSERIR INTO TABLE lt_user.
 ENDLOOP.
 ORDENAR lt_usuario POR auth.
 ELIMINAR DUPLICADOS ADAXACENTES DE lt_user COMPARANDO autenticación.
 SE sy-subrc = 0.
 LOOP AT lt_user ASIGNANDO CAMPO-SÍMBOLO( ).
 SE lv_string_final É INICIAL.
 lv_string_final = -auth.
 OUTRO.
 CONCATENAR lv_string_final -auth INTO lv_string_final SEPARADO POR ','.
 ENDIF.
 ENDLOOP.
 ENDIF.

 

Deixe un comentario

Este sitio usa Akismet para reducir o spam. Aprende a procesar os teus datos de comentarios.