Как правило, вы не можете переопределить атрибуты, это запрещено моделью ABAP OO.
Однако вы можете сделать следующий трюк: объявить атрибут вашего суперкласса типа DATA
(aka объект данных ) и затем назначьте ему любой тип в подклассе, который расширяет ваш суперкласс.
При условии, что у вас есть два типа операций, которые однозначно идентифицируют себя: zcl_operations_generic :
CLASS zcl_operations_generic DEFINITION.
PUBLIC SECTION.
DATA l_wheel TYPE char5 VALUE 'wheel'.
METHODS: identify_me.
ENDCLASS.
CLASS zcl_operations_generic IMPLEMENTATION.
METHOD identify_me.
WRITE: `I am `, condense( cl_abap_classdescr=>get_class_name( me ) ), `and I have a`, l_wheel.
ENDMETHOD.
ENDCLASS.
и более конкретно zcl_operations_specific1
CLASS zcl_operations_specific1 DEFINITION.
PUBLIC SECTION.
DATA l_wheel TYPE char10 VALUE 'truckwheel'.
METHODS: who_am_i.
ENDCLASS.
CLASS zcl_operations_specific1 IMPLEMENTATION.
METHOD who_am_i.
WRITE: `I am `, condense( cl_abap_classdescr=>get_class_name( me ) ), `and I have a`, l_wheel.
ENDMETHOD.
ENDCLASS.
Затем при создании общего рабочего задания zcl_workorder_generic вы указываете операциюmr_data
как универсальный тип и выполните необходимые инициализации типа в конструкторе и методе:
CLASS zcl_workorder_generic DEFINITION.
PUBLIC SECTION.
DATA mr_data TYPE REF TO data.
METHODS initialize EXPORTING out_order TYPE ANY.
METHODS constructor.
ENDCLASS.
CLASS zcl_workorder_generic IMPLEMENTATION.
METHOD initialize.
FIELD-SYMBOLS: <lr_data> TYPE REF TO zcl_operations_generic.
ASSIGN mr_data->* TO <lr_data>.
CREATE OBJECT <lr_data>.
out_order = <lr_data>.
ENDMETHOD.
METHOD constructor.
CREATE DATA mr_data TYPE REF TO zcl_operations_generic.
ENDMETHOD.
ENDCLASS.
и в определенном рабочем порядке zcl_workorder_specific1 вам следует переопределить методы конструктора / инициализации для нового типа:
CLASS zcl_workorder_specific1 DEFINITION INHERITING FROM zcl_workorder_generic.
PUBLIC SECTION.
METHODS initialize REDEFINITION.
METHODS constructor.
ENDCLASS.
CLASS zcl_workorder_specific1 IMPLEMENTATION.
METHOD initialize.
FIELD-SYMBOLS: <lr_data> TYPE REF TO zcl_operations_specific1.
ASSIGN mr_data->* TO <lr_data>.
CREATE OBJECT <lr_data>.
out_order = <lr_data>.
ENDMETHOD.
METHOD constructor.
super->constructor( ).
CREATE DATA mr_data TYPE REF TO zcl_operations_specific1.
ENDMETHOD.
ENDCLASS.
Затем вы можете создать такие экземпляры ваших заказов, а затем проверить правильность создания атрибутов. By вызывая соответствующие методы атрибута:
START-OF-SELECTION.
DATA: generic TYPE REF TO zcl_operations_generic.
DATA(lr_work_order) = NEW zcl_workorder_generic( ).
lr_work_order->initialize( IMPORTING out_order = generic ).
generic->identify_me( ).
WRITE: /.
DATA: specific TYPE REF TO zcl_operations_specific1.
lr_work_order = NEW zcl_workorder_specific1( ).
lr_work_order->initialize( IMPORTING out_order = specific ).
specific->who_am_i( ).
Но это просто хитрый обходной путь, и я согласен с тем, что переопределение атрибутов Florian - это плохой подход, который не должен использоваться.