Skip to Content

Archived discussions are read-only. Learn more about SAP Q&A

Nested interfaces and abstract methods

Consider the following design:

interface ZIF_INTERFACE_A.
  methods METHOD_A.
endinterface.

interface ZIF_INTERFACE_B.
  interfaces ZIF_INTERFACE_A.
  methods METHOD_B.
endinterface.

class CLASS_A_B definition abstract.
public section.
  interfaces ZIF_INTERFACE_B
    abstract methods METHOD_B.
  interfaces ZIF_INTERFACE_A
    abstract methods METHOD_A.
  methods METHOD_C.
endclass.
class CLASS_A_B implementation.
  method METHOD_C.
  endmethod.
endclass.

When trying to implement this design, the syntax check is giving me an error:

The method "METHOD_A" was declared as not ABSTRACT in a previous INTERFACES statement.

If I implement the design with Java (either using a public nested interface, or using interface inheritance) there is no problem declaring both the methods METHOD_A and METHOD_B as abstract in the CLASS_A_B class.

So it seems to me this might be a bug in the ABAP Objects implementation. Or perhaps I am missing something else here? Does anyone have any suggestions?

Former Member
replied

Hello,

Nested interfaces

When you include an IF in another IF both of them will exist on the same level, there is no concept of hierarchy. So when you add interface ZIF_B in the implementing class ZCL_A_B, the interface ZIF_A is also "included" in the relationship with the class ZCL_A_B implicitly.

Just try to activate the code below & you'll get the error: "Implementation missing for method zif_interface_a~method_a":

CLASS class_a_b DEFINITION ABSTRACT.
  PUBLIC SECTION.
*    INTERFACES zif_interface_a
*      ABSTRACT METHODS method_a.
    INTERFACES zif_interface_b
      ABSTRACT METHODS: method_b.
    METHODS method_c.
ENDCLASS.                    "CLASS_A_B DEFINITION

CLASS class_a_b DEFINITION ABSTRACT.
  PUBLIC SECTION.
    INTERFACES zif_interface_b
      ABSTRACT METHODS method_b.
    INTERFACES zif_interface_a
      ABSTRACT METHODS method_a.
    METHODS method_c.
ENDCLASS.                    "CLASS_A_B DEFINITION

So when the compiler is trying to compile your code it encounter implementation of ZIF_INTERFACE_B it finds that the "included interface" method ZIF_INTERFACE_Amethod_a is not abstract. So when you declare ZIF_INTERFACE_Amethod_a as "abstract" in the next line the compiler throws this error.

So you need to define ZIF_INTERFACE_A~method_a as abstract, before defining ZIF_INTERFACE_B. Like this:

CLASS class_a_b DEFINITION ABSTRACT.
  PUBLIC SECTION.

    INTERFACES zif_interface_a
      ABSTRACT METHODS method_a.

    INTERFACES zif_interface_b
      ABSTRACT METHODS method_b.
    
    METHODS method_c.
ENDCLASS.                    "CLASS_A_B DEFINITION

In this case the compiler treats method_a as abstract while checking ZIF_INTERFACE_B. Hence it doesn't throw any error.

Hope i'm clear.

BR,

Suhas

PS: Whenever i face any problem while creating local classes, i create a dummy class in the class builder to check

0 View this answer in context

Helpful Answer

by
Not what you were looking for? View more on this topic or Ask a question