Casting en Programa ABAP

CLASE a1 DEFINICIÓN.
 SECCIÓN PÚBLICA.
 DATO: num1 TIPO i VALOR 100.
 MÉTODOS:m1.
 FIN DE CLASE.
 IMPLEMENTACIÓN CLASE a1.
 MÉTODO m1.
 ESCRIBE: 'a1:',num1.
 MÉTODO FINAL.
 FIN DE CLASE.
 CLASE b1 DEFINICIÓN HEREDANTE DE a1.
 SECCIÓN PÚBLICA.
 MÉTODOS:m2, m1 REDEFINICIÓN.
 FIN DE CLASE.
 IMPLEMENTACIÓN CLASE b1.
 MÉTODO m1.
 número1 = número1.
 ESCRIBE: 'b1:',num1.
 MÉTODO FINAL.
 MÉTODO m2.
 ESCRIBE: 'M2 en clase b1'.
 MÉTODO FINAL.
 FIN DE CLASE.
 INICIO DE SELECCIÓN.
 DATOS: a TIPO REF A a1.
 DATOS: b TIPO REF A b1.
 *datos: tipo c REF TO c1.
 **************************************************** ************** CREAR OBJETO b.
 a = b.  "upcasting METODO DE LLAMADA a->m1( ).
 *llamar al MÉTODO a->m2( ).  "No podemos acceder a los propios métodos de subclase utilizando la referencia de superclase.
 NUEVA LÍNEA.
 b ? = a.  " Downcast LLAMAR MÉTODO b->m1( ).
 NUEVA LÍNEA.
 MÉTODO DE LLAMADA b->m2( ).
 **************************************************** *************** " error nulo ref crear OBJETO a.
 b ? = a.  "Downcasting aún está dando una llamada de volcado MÉTODO b->m1 ().
 **************************************************** *************** CREAR OBJETO a.
 TRATAR.
 b ? = a.  "Intentó usar un volcado de referencia de objeto 'NULL' CATCH cx_sy_move_cast_error.
 MÉTODO DE LLAMADA b->m1( ).
 ENTRADA.
 **************************************************** *************** CREAR OBJETO a.
 CREAR OBJETO b.
 TRATAR.
 b ? = a.
 CAPTURA cx_sy_move_cast_error.
 MÉTODO DE LLAMADA b->m1( ).
 llame al MÉTODO b->m2( ).
 ENTRADA.
 CLASE lcl_shape DEFINICIÓN.
 SECCIÓN PÚBLICA.
 MÉTODOS dibujar.
 FIN DE CLASE.
 CLASE lcl_circle DEFINICIÓN HEREDANDO DE lcl_shape.
 SECCIÓN PÚBLICA.
 MÉTODOS: dibujar REDEFINICIÓN, calc_area.
 FIN DE CLASE.
 IMPLEMENTACIÓN DE LA CLASE lcl_shape.
 MÉTODO sorteo.
 ESCRIBE :/ 'Dibujando cualquier forma'.
 MÉTODO FINAL.
 FIN DE CLASE.
 CLASE lcl_circle IMPLEMENTACIÓN.
 MÉTODO sorteo.
 WRITE :/ 'Dibujo de forma específica: Círculo'.
 MÉTODO FINAL.
 MÉTODO calc_area.
 ESCRIBIR :/ 'Área del Círculo = 2iiR'.
 MÉTODO FINAL.
 FIN DE CLASE.
 INICIO DE SELECCIÓN.
 DATOS: o_cir TIPO REF TO lcl_circle.
 CREAR OBJETO o_cir.
 MÉTODO DE LLAMADA o_cir->draw().  " llama al método Draw() de la subclase CALL METHOD o_cir->calc_area().
 ULINE.
 "--------- Moldeo estrecho (Upcast)---------------" DATOS: o_shp TYPE REF TO lcl_shape.
 o_shp = o_cir.  " Reparto estrecho (Upcast) MÉTODO DE LLAMADA o_shp->draw().  " llama al método Draw() de la subclase "llama al MÉTODO o_shp->calc_area() .  "Error de compilación ULINE.
 "---------------- Ensanchamiento de Cast (Downcast) -----------" DATOS: o_cir1 TYPE REF TO lcl_circle.
 " o_cir1 = o_shp.  " error de compilación o_cir1 ?= o_shp.  " Ensanchamiento Cast(Downcast) CALL METHOD o_cir1->draw().  " llama al método Draw() de la subclase CALL METHOD o_cir1->calc_area().
 CLASE a1 DEFINICIÓN.
 SECCIÓN PÚBLICA.
 DATO: num1 TIPO i VALOR 100.
 MÉTODOS:m1.
 FIN DE CLASE.
 IMPLEMENTACIÓN CLASE a1.
 MÉTODO m1.
 ESCRIBE: 'a1:',num1.
 MÉTODO FINAL.
 FIN DE CLASE.
 CLASE b1 DEFINICIÓN HEREDANTE DE a1.
 SECCIÓN PÚBLICA.
 MÉTODOS:m2, m1 REDEFINICIÓN.
 FIN DE CLASE.
 IMPLEMENTACIÓN CLASE b1.
 MÉTODO m1.
 número1 = número1.
 ESCRIBE: 'b1:',num1.
 MÉTODO FINAL.
 MÉTODO m2.
 ESCRIBE: 'M2 en clase b1'.
 MÉTODO FINAL.
 FIN DE CLASE.
 INICIO DE SELECCIÓN.
 DATOS: padre TIPO REF A a1.
 DATOS: niño TIPO REF A b1.
 *datos: tipo c REF TO c1.
 **************************************************** ************** CREAR OBJETO hijo.
 padre = hijo.  "upcasting CALL METHOD parent->m1( ).
 MÉTODO DE LLAMADA hijo->m1( ).
 MÉTODO DE LLAMADA hijo->m2( ).
 *llamar al MÉTODO a->m2( ).  "No podemos acceder a los propios métodos de subclase utilizando la referencia de superclase.
 NUEVA LÍNEA.
 hijo ?= padre.  " downcast CALL METHOD child->m1( ).
 NUEVA LÍNEA.
 MÉTODO DE LLAMADA hijo->m2( ).
 **************************************************** **************** *" error referencia nula *crear OBJETO a.
 *b ?= a.  "Downcasting todavía está dando volcado * llame al MÉTODO b-> m1 ().
 **************************************************** **************** * CREAR OBJETO a.
 TRATAR.
 b ? = a.  "Intentó usar un volcado de referencia de objeto 'NULL' CATCH cx_sy_move_cast_error.
 MÉTODO DE LLAMADA b->m1( ).
 ENTRADA.
 **************************************************** **************** * CREAR OBJETO a.
 CREAR OBJETO b.
 TRATAR.
 b ? = a.
 CAPTURA cx_sy_move_cast_error.
 MÉTODO DE LLAMADA b->m1( ).
 llame al MÉTODO b->m2( ).
 ENTRADA.
 ******** Valores únicos******************* DATOS: lv_string TYPE string, lv_string2 TYPE string, lv_string_final TYPE string.
 TIPOS: COMIENZO DE ty_data, auth TYPE c, FIN DE ty_data.
 DATOS: ls_user TIPO ty_data, ls_user2 TIPO ty_data, lt_user2 TIPO TABLA DE ty_data, lt_user TIPO TABLA DE ty_data.
 lv_cadena = 'a,b,c,a'.
 lv_cadena2 = 'd,b,c,a'.
 DIVIDIR lv_string EN ',' EN LA TABLA lt_user.
 DIVIDIR lv_string2 EN ',' EN LA TABLA lt_user2.
 BUCLE EN lt_user2 ASIGNANDO SÍMBOLO DE CAMPO ( ).
 INSERTAR EN LA TABLA lt_user.
 ENDLOOP.
 ORDENAR lt_user POR autenticación.
 ELIMINAR DUPLICADOS ADYACENTES DE lt_user COMPARANDO auth.
 SI sy-subrc = 0.
 LOOP AT lt_user ASIGNACIÓN DE SÍMBOLO DE CAMPO ( ).
 SI lv_string_final ES INICIAL.
 lv_string_final = -autorización
 DEMÁS.
 CONCATENAR lv_string_final -auth EN lv_string_final SEPARADO POR ','.
 TERMINARA SI.
 ENDLOOP.
 TERMINARA SI.

 

Déjame tu comentario

Este sitio usa Akismet para reducir el correo no deseado. Descubra cómo se procesan los datos de sus comentarios.