Widening Cast

¿Cómo se utiliza Widening Cast?
Cuando asignamos la instancia de la superclase a la subclase se llama Widening Cast porque nos estamos moviendo de la “Vista más específica” a la “Vista menos específica”.
No es posible mover siempre la referencia de la superclase a la subclase, porque la subclase podría tener más funcionalidad en comparación con la superclase. Por lo tanto, tenemos que ser más cuidadosos cuando usamos Widening Cast. El error se puede capturar con CX_SY_MOVE_CAST_ERROR.
En este artículo vamos a aprender a utilizar Widening Cast y vamos a ver su funcionalidad.
En un programa ejecutable se va a crear una jerarquía de dos clases (ANIMAL y LEON). En la clase superior definimos el método ANDAR y en la implementación del método creamos una sentencia WRITE indicando que “El Animal anda”. En la clase hija redefinimos el mismo método e implementamos una sentencia WRITE indicando que “El león anda”. Utilizamos Widening Cast para asignar una instancia de la clase hija en una referencia de la clase superior y llamamos al método ANDAR de la referencia ANIMAL en el evento START-OF-SELECTION.

¿Quién anda?
Aunque llamamos a un método de la clase superior sobre una referencia de la clase superior se va ejecutar el método de la clase hija. Porque con la asignación Widening Cast estamos en realidad apuntando al objeto de la clase hija. Por tanto, El León anda.

4 comentarios de “Widening Cast

  1. gianmarco dice:

    No es al reves?
    Cuando asignamos la instancia de la Superclase a la Subclase, se denomina Widening Cast, porque nos estamos moviendo a la “Vista más específica” desde la “Vista menos específica”.

  2. gianmarco dice:

    Narrowing cast: Cuando asignamos a la instancia de la super clase la instancia de la sub clase.
    Vista menos específica <—-Vista más específica
    (superclase) (subclase)
    En muchas páginas de internet me dicen esto y usted lo contrario, por favor espero su respuesta, porque la verdad me siento confundido

    • Gheorghe Valer Scurtu dice:

      Hola,
      Es un tema que genera confusiones ya que en otros lenguajes de programación este concepto es tratado al revés e incluso en los mismos foros de SAP.
      Nuestros artículos se basan en las definiciones del fabricante y en este caso la documentación oficial de SAP de ABAP Runtime Environment (BC-ABA) dice lo siguiente:
      Narrowing Cast – Also referred to as down cast.
      Assignment between reference variables in which the static type of the target variable is more specific than the static type of the source variable. Only possible in assignments using the casting operator (?=) or MOVE … ?TO.
      Widening Cast
      Assignment between reference variables in which the static type of the target variable is more general or the same as the type of the source variable.
      En la lógica del artículo hicimos lo mismo con Widening Cast asignando a una referencia general (la clase superior) una instancia de una fuente del mismo tipo (clase hija).
      Un saludo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *