REPORT ZVV0003.
*----------------------------------------------------------------------*
class c_base definition.
public section.
methods: constructor importing value(p_name) type string,
m_show.
data a_name1 type string.
endclass.
*----------------------------------------------------------------------*
class c_derived definition inheriting from c_base.
public section.
methods: constructor importing value(p_name1) type string
value(p_name2) type string,
m_show redefinition.
data a_name2 type string.
endclass.
*----------------------------------------------------------------------*
class c_base implementation.
method constructor.
a_name1 = p_name.
endmethod.
method m_show.
write: / 'Base:', a_name1, '.'.
endmethod.
endclass.
*----------------------------------------------------------------------*
class c_derived implementation.
method constructor.
call method: super->constructor exporting p_name = p_name1.
a_name2 = p_name2.
endmethod.
method m_show.
write: / 'Derived:', a_name1, ',', a_name2, '.'.
endmethod.
endclass.
*----------------------------------------------------------------------*
data: o_1a type ref to c_base,
o_1b type ref to c_base,
o_2a type ref to c_derived,
o_2b type ref to c_derived.
*----------------------------------------------------------------------*
END-OF-SELECTION.
*----------------------------------------------------------------------*
create object: o_2a exporting p_name1 = 'First' p_name2 = 'Second',
o_1a exporting p_name = '=1st='.
o_1b = o_2a. "no problem
call method: o_1a->m_show,
o_2a->m_show,
o_1b->m_show.
catch system-exceptions move_cast_error = 4.
o_2b ?= o_1a. "impossible
endcatch.
if sy-subrc = 4. write / 'Cannot cast o_2b ?= o_1a.'.
else. call method o_2b->m_show.
endif.
catch system-exceptions move_cast_error = 4.
o_2b ?= o_1b. "only casting possible
endcatch.
if sy-subrc = 4. write / 'Cannot cast o_2b ?= o_1b.'.
else. call method o_2b->m_show.
endif.
*----------------------------------------------------------------------*
|