Ansicht
Dokumentation

ABAPINTERFACES_CLASS - INTERFACES CLASS

ABAPINTERFACES_CLASS - INTERFACES CLASS

CL_GUI_FRONTEND_SERVICES - Frontend Services   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

INTERFACES, implementation

Kurzreferenz



INTERFACES intf
  $[PARTIALLY IMPLEMENTED$]
  ${ ${$[ABSTRACT METHODS meth1 meth2 ... $]
     $[FINAL METHODS meth1 meth2 ... $]$}
  $| $[ALL METHODS ${ABSTRACT$|FINAL$}$] $}
  $[DATA VALUES attr1 = val1 attr2 = val2 ...$].

Zusätze:

1. ... ABSTRACT METHODS meth1 meth2 ...

2. ... FINAL METHODS meth1 meth2 ...

3. ... ALL METHODS ${ABSTRACT$|FINAL$}

4. ... DATA VALUES attr1 = val1 attr2 = val2 ...

Wirkung

Im öffentlichen Sichtbarkeitsbereich einer Klasse implementiert die Anweisung INTERFACES das Interface intf in der Klasse. Zudem ist die Angabe von Zusätzen möglich, welche die Eigenschaften von Interfacekomponenten in der Klasse bestimmen.

Für intf können alle an dieser Stelle sichtbaren lokalen oder globalen Interfaces angegeben werden, die nicht bereits in einer Oberklasse der aktuellen Klasse eingebunden sind. Durch die Implementierung werden die Komponenten des Interfaces zu öffentlichen Komponenten der Klasse. Eine Interfacekomponente namens comp hat in der Klasse den Namen intf~comp, wobei intf der Name des Interfaces und das Zeichen ~ der Interfacekomponenten-Selektor ist. Eine Klasse muss alle Methoden des Interfaces in ihrem Implementierungsteil implementieren, mit folgenden Ausnahmen:

  • Interfacemethoden, die mit dem Zusatz DEFAULT als optional deklariert sind.
  • Interfacemethoden, die nach dem Zusatz ABSTRACT METHODS in der Klasse angegeben werden und daher als abstrakt deklariert sind.
  • In Testklassen kann eine teilweise Implementierung über den Zusatz PARTIALLY IMPLEMENTED erlaubt werden.

Hinweise

  • Eine Klasse kann beliebig viele verschiedene Interfaces implementieren. Alle von einer Klasse implementierten Interfaces werden gleichberechtigt und nebeneinander implementiert. Wenn ein in einer Klasse implementiertes Interface intf zusammengesetzt ist, d.h. Komponenten-Interfaces enthält, werden diese unabhängig von ihrer Schachtelungshierarchie wie einzelne Interfaces in der Klasse implementiert und ihre Komponenten werden nicht über den Namen intf, sondern den ihres Komponenten-Interfaces angesprochen. Die mehrfache Verwendung des Interfacekomponenten-Selektors in einem Bezeichner (intf1~intf2~comp) ist prinzipiell nicht möglich.
  • Jedes Interface kommt in einer Klasse genau einmal vor und jede Interfacekomponente comp ist immer eindeutig über intf~comp ansprechbar. Auch die Komponenten eines Interfaces, das dadurch, dass es Interfacekomponente eines oder mehrerer anderer Interfaces ist, scheinbar mehrmals in einer Klasse implementiert werden kann, gibt es nur ein einziges Mal.
  • Wenn in einer Klasse die Implementierung einer nicht-optionalen Methode eines mit INTERFACES implementierten globalen Interface fehlt, kommt es statt zu einem Syntaxfehler nur zu einer Syntaxwarnung. Dadurch wird verhindert, dass Klassen durch nachträgliche Erweiterungen globaler Interfaces unverwendbar werden. Der Aufruf einer fehlenden Implementierung führt aber immer zu einer Ausnahme der Klasse CX_SY_DYN_CALL_ILLEGAL_METHOD und bei deren Nichtbehandlung zum Laufzeitfehler CALL_METHOD_NOT_IMPLEMENTED. Bei der Verwendung lokaler Interfaces kommt es bei einer fehlenden Implementierung zu einem echten Syntaxfehler.
  • Wenn eine Klasse in ihrem Implementierungsteil eine Methode intf~... eines mit INTERFACES implementierten globalen Interfaces intf implementiert, die im Interface nicht deklariert ist, kommt es zu einer Warnung durch die Syntaxprüfung. Eine solche Methodenimplementierung ist totes Coding, das nicht ausgeführt werden kann und entfernt werden sollte. Bei einem Syntaxfehler würden Klassen unverwendbar, wenn aus einem implementierten globalen Interface Methoden nachträglich gelöscht werden, die in der Klasse ohnehin keine Rolle spielten und beispielsweise nur leer implementiert waren. Bei der Verwendung lokaler Interfaces kommt es zu einem echten Syntaxfehler.

Beispiel

Implementierung eines Interface intf in einer Klasse cls.

Zusatz 1

... ABSTRACT METHODS meth1 meth2 ...

Zusatz 2

... FINAL METHODS meth1 meth2 ...

Wirkung

Mit den Zusätzen ABSTRACT METHODS und FINAL METHODS können einzelne Instanzmethoden meth des Interfaces in der implementierenden Klasse abstrakt oder final gemacht werden. Dabei gelten die gleichen Regeln wie für die Zusätze ABSTRACT und FINAL der Anweisung METHODS. Insbesondere muss die gesamte Klasse abstrakt sein, wenn eine Interfacemethode abstrakt gemacht wird, und es darf keine Interfacemethode hinter ABSTRACT METHODS und FINAL METHODS aufgeführt werden.

Als Methoden meth1, meth2, ... können angegeben werden:

  • Instanzmethoden, die im Interface intf selbst deklariert sind
  • Im Interface intf deklarierte Aliasnamen für Instanzmethoden, die in Interfaces deklariert sind, welche in intf eingebunden sind.
  • Instanzmethoden, die in Interfaces deklariert sind, welche in intf eingebunden sind, über den Namen ihrer Interfaces und den Interfacekomponenten-Selektor (~). In diesem Fall kann das Komponenten-Interface nicht selbst mit der Anweisung INTERFACES eingebunden werden.

Wenn ein Interface über mehrere INTERFACES-Anweisungen eingebunden wird, dürfen die Angaben in den jeweiligen Zusätzen FINAL und ABSTRACT nicht zu widersprüchlichen Definitionen für eine Methode führen.

Definition abstrakter Methoden beim Einbinden zweier Interfaces intf1 und intf2 in einer abstrakten Klasse cls.

Kurzform des vorhergehenden Beispiels. Da intf2 das Interface intf1 einbindet, kann dessen Methode als intf1~meth1 angegeben werden. Eine eigene Anweisung INTERFACES intf1 ist in dieser Klasse dadurch nicht mehr möglich.

Zusatz 3

... ALL METHODS ${ABSTRACT$|FINAL$}

Wirkung

Statt in der Klasse einzelne Interfacemethoden abstrakt oder final zu machen, können mit dem Zusatz ALL METHODS ${ABSTRACT$|FINAL$} alle Interfacemethoden entweder abstrakt oder final gemacht werden.

Einbinden eines Interface intf in einer abstrakten Klasse cls1, wobei alle Methoden abstrakt gemacht werden und ihre Implementierung in einer Unterklasse cls2 erfolgen muss.

Zusatz 4

... DATA VALUES attr1 = val1 attr2 = val2 ...

Wirkung

Mit dem Zusatz DATA VALUES können einzelnen Attributen attr Anfangswerte zugeordnet werden. Der Zusatz erfüllt für Instanzattribute die gleiche Funktion wie der Zusatz VALUE der Anweisung DATA für klasseneigene Attribute.

Als Attribute attr1, attr2, ... können angegeben werden:

  • Attribute die im Interface intf selbst deklariert sind.
  • Im Interface intf deklarierte Aliasnamen für Attribute, die in Interfaces deklariert sind, welche in intf eingebunden sind.
  • Attribute, die in Interfaces deklariert sind, welche in intf eingebunden sind, über den Namen des eigenen Interfaces und den Interfacekomponenten-Selektor (~). In diesem Fall kann das Komponenten-Interface nicht selbst mit der Anweisung INTERFACES eingebunden werden.

Konstanten, die im Interface oder einem Komponenten-Interface mit der Anweisung CONSTANTS deklariert sind, können nicht hinter dem Zusatz DATA VALUES aufgeführt werden.

Beispiel

Einbinden eines Interface intf in einer Klasse cls, wobei die Interfaceattribute mit Startwerten versehen werden.






BAL Application Log Documentation   PERFORM Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 10799 Date: 20240329 Time: 113857     sap01-206 ( 176 ms )