1) просто так конструктор переписать не удастся, только с "нарушениями"
так как в child-class должна быть конструкция super->constructor( ), которая всегда будет выполнять нужный Вам метод (или не нужный - имею ввиду метод lcl_class1->meth1).
2) а это Вы просто рассуждаете на тему ООП или есть какая-то задача (проблема), которая уперлась в эту задачу? )))
Если "край как нужно" вызвать lcl_class2->meth1 без вызова lcl_class1->meth1 (при этом возможности изменять lcl_class1 нет) то можно вот так
(такая ситуация может встречаться, когда наследование идет от стандартных классов (особенно по Industry Solutions), чтобы не иметь проблем при очередном обновлении решения)
Code:
CLASS lcl_class1 DEFINITION.
PUBLIC SECTION.
METHODS constructor.
PROTECTED SECTION.
METHODS meth1.
ENDCLASS.
CLASS lcl_class1 IMPLEMENTATION.
METHOD meth1.
WRITE 'lcl_class1.meth1'.
ENDMETHOD.
METHOD constructor.
me->meth1( ).
ENDMETHOD.
ENDCLASS.
CLASS lcl_class2 DEFINITION INHERITING FROM lcl_class1.
PUBLIC SECTION.
methods: constructor
, meth22
.
PROTECTED SECTION.
METHODS meth1 REDEFINITION.
ENDCLASS.
CLASS lcl_class2 IMPLEMENTATION.
METHOD constructor.
" Компилятор скажет
" The constructor of the superclass must not be called conditionally;
" a preceding RETURN, EXIT or CHECK is therefore not permitted
" но это желтое сообщение
RETURN. """ -
super->constructor( ).
endmethod.
METHOD meth1.
WRITE 'lcl_class2.meth1'.
ENDMETHOD.
"""""""""""""""""""""""""""""""""""""""
method meth22.
me->meth1( ).
endmethod.
""""""""""""""""""""""""""""""""""""""
ENDCLASS.
DATA:
lo1 TYPE REF TO lcl_class1
, lo2 TYPE REF TO lcl_class2
.
START-OF-SELECTION.
lo2 = new lcl_class2( ).
lo2->meth22( ).
если есть возможность поменять lcl_class1, то можно передать параметр в constructor и внести некоторые изменения в сам код
(это наиболее предпочтительный подход)
Code:
CLASS lcl_class1 DEFINITION.
PUBLIC SECTION.
METHODS constructor
IMPORTING iv_mode TYPE char1 OPTIONAL
.
PROTECTED SECTION.
METHODS meth1.
ENDCLASS.
CLASS lcl_class1 IMPLEMENTATION.
METHOD meth1.
WRITE 'lcl_class1.meth1'.
ENDMETHOD.
METHOD constructor.
CASE iv_mode.
WHEN 'A'.
RETURN.
WHEN '1'.
WHEN OTHERS.
me->meth1( ).
ENDCASE.
ENDMETHOD.
ENDCLASS.
CLASS lcl_class2 DEFINITION INHERITING FROM lcl_class1.
PUBLIC SECTION.
methods meth22.
PROTECTED SECTION.
METHODS meth1 REDEFINITION.
ENDCLASS.
CLASS lcl_class2 IMPLEMENTATION.
METHOD meth1.
WRITE 'lcl_class2.meth1'.
ENDMETHOD.
"""""""""""""""""""""""""""""""""""""""
method meth22.
me->meth1( ).
endmethod.
""""""""""""""""""""""""""""""""""""""
ENDCLASS.
DATA:
lo1 TYPE REF TO lcl_class1
, lo2 TYPE REF TO lcl_class2
.
START-OF-SELECTION.
lo2 = new lcl_class2( 'A' ).
lo2->meth22( ).