Class 访问超类的成员函数

Class 访问超类的成员函数,class,inheritance,abap,Class,Inheritance,Abap,如何从子类方法访问超类方法? 下面是一个说明问题的示例: 比如说,我们有两个班 class parent definition. public section. methods f. endclass. class child definition inheriting from parent. public section. methods f redefinition. methods g. endclass. 现在,在g的实现中,我们想调用f的超类实现,类似于下面语法错误的

如何从子类方法访问超类方法?

下面是一个说明问题的示例: 比如说,我们有两个班

class parent definition.
public section.
  methods f.
endclass.

class child definition inheriting from parent.
public section.
  methods f redefinition.
  methods g.
endclass.
现在,在
g
的实现中,我们想调用
f
的超类实现,类似于下面语法错误的代码片段

class child implementation.
  method g.
    super->f( ). "forbidden: super-> can only be used to call the previous implementation of the same method
  endmethod.
endclass.
如评论中所述,无法使用
super->
。你能帮忙吗


谷歌搜索之后,有人建议将
parent->f
的实现复制到
child->g
中,这真的是唯一的方法吗


实际用例


@vwegert问为什么首先要重新定义
f
。在我的实际用例中,
parent
是一个视图,
child
是它的扩展
child->f
是一个事件处理程序,应该触发弹出窗口<当弹出窗口以调用
g
的形式关闭时,code>child接收回调。如果调用了
g
,则应调用原始实现
parent->f

您将不得不求助于一些相当丑陋的解决方法,例如在
g
中设置一个标志(对象的属性),然后调用重新定义的
f
,检查标志是否已设置,如果已设置,则只调用
super->f
。不过,这听起来像是一个非常破烂的设计。你不必细说,但是我假设您无法更改父视图-否则我强烈建议您重新考虑设计,因为这将导致不必要的复杂性和技术债务,这很可能会引入错误并增加维护成本。

如果您不介意在父类中创建受保护的方法
do\f
,然后将控件从
f
方法委托给其中的
do\u f
方法。那么下面的解决方案可能是一个很好的解决方案。没有代码重复,只有在“original”
f
方法中委派调用的一些额外工作

REPORT zzy.

CLASS parent DEFINITION.
  PUBLIC SECTION.
    METHODS f.
  PROTECTED SECTION.
    METHODS do_f.
ENDCLASS.

CLASS parent IMPLEMENTATION.
  METHOD f.
    do_f( ).
  ENDMETHOD.

  METHOD do_f.
    WRITE / 'Parent''s f'.
  ENDMETHOD.
ENDCLASS.

CLASS child DEFINITION INHERITING FROM parent.
  PUBLIC SECTION.
    METHODS:
      f REDEFINITION,
      g.
ENDCLASS.

CLASS child IMPLEMENTATION.
  METHOD f.
    WRITE / 'Child''s f'.
  ENDMETHOD.

  METHOD g.
    do_f( ).
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  DATA(lo_child) = NEW child( ).
  lo_child->g( ).
  lo_child->f( ).

为什么首先要重新定义方法…?@vwegert我已经在问题中添加了实际的用例,但是我相信,一般问题也应该得到答案。@vwegert这确实是我提出的解决方案。我会把这个问题留一段时间,希望能有更好的解决办法。否则我最终会接受的。