Crear instancias de tipos distintos

En ABAP no se pueden crear objetos sobre las referencias de las interfaces o clases abstractas, pero sobre estas referencias se pueden crear objetos de las clases que han implementado la interfaz o de las subclases que han heredado la clase abstracta.
Crear instancias de tipos distintos sobre la referencia de las interfaces
Veamos el siguiente ejemplo donde la clase CL_ADMINISTRADOR implementa la interfaz IF_EMPLEADO.
INTERFACE if_empleado.
ENDINTERFACE.
CLASS cl_administrador DEFINITION.
  PUBLIC SECTION.
    INTERFACES if_empleado.
ENDCLASS.
Como ya sabemos, no podemos crear un objeto sobre una referencia de la interfaz.
DATA: gr_empleado TYPE REF TO if_empleado.
  CREATE OBJECT gr_empleado.
La sentencia CREATE OBJECT resulta en un error de compilación.
Pero en la misma sentencia CREATE OBJECT sobre la misma referencia podemos crear un objeto de una clase que ha implementado la interfaz indicándole con el añadido TYPE y el nombre de la clase.
CREATE OBJECT gr_empleado TYPE cl_administrador
La misma sentencia se puede traducir así: una creación del objeto sobre la referencia de la clase y otra de asignación a la referencia de la interfaz.
DATAgr_empleado      TYPE REF TO if_empleado,
gr_administrador TYPE REF TO cl_administrador.
CREATE OBJECT gr_administrador.
gr_empleado = gr_administrador.
Crear instancias de tipos distintos sobre la referencia de las clases
Podemos crear objetos de distinto tipo a la referencia declarada, la única condición clave es que entre la referencia y el tipo indicado tiene que existir una relación de herencia. Sin esta relación es imposible crear el objeto de tipo distinto.
Veamos el siguiente ejemplo donde la clase CL_TECNICO hereda de la clase CL_EMPLEADO.
 CLASS cl_empleado DEFINITION.
ENDCLASS.
CLASS cl_tecnico DEFINITION INHERITING FROM cl_empleado.
ENDCLASS.
Declaramos una referencia de la clase superior.
 DATA gr_empleado TYPE REF TO cl_empleado.
Utilizando el añadido TYPE sobre la sentencia CREATE OBJECT podemos crear en la referencia de la clase superior un objeto de la subclase CL_TECNICO.
  CREATE OBJECT gr_empleado TYPE cl_tecnico.
Para entender mejor los conceptos y cómo se crean instancias de tipos distintos, vamos a crear un caso práctico.
En un programa ejecutable definimos la clase abstracta CL_PRESUPUESTO con el método abstracto SET_PRESUPUESTO.  A continuación, creamos la clase CL_PRESUPUESTO_NEGOCIO que hereda de la clase abstracta. En el evento START-OF-SELCTION instanciamos en una referencia de la clase abstracta un objeto del tipo CL_PRESUPUESTO.

Deja una respuesta

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