サーチ…


クラス宣言

ABAPクラスは、 グローバルまたはローカルで宣言できます。グローバルクラスは、ABAPリポジトリ内の任意のオブジェクトで使用できます。対照的に、ローカルクラスは宣言されているスコープ内でのみ使用できます。

CLASS lcl_abap_class DEFINITION.
  PUBLIC SECTION.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

CLASS lcl_abap_class IMPLEMENTATION.
ENDCLASS.

コンストラクタ、メソッド

クラスの実装:

CLASS lcl_abap_class DEFINITION.
  PUBLIC SECTION.
    METHODS: constructor,
             method1.
  PROTECTED SECTION.
  PRIVATE SECTION.
    METHODS: method2,
             method3.
ENDCLASS.

CLASS lcl_abap_class IMPLEMENTATION.
    METHOD constructor.
        "Logic
    ENDMETHOD.

    METHOD method1.
        "Logic
    ENDMETHOD.

    METHOD method2.
        "Logic
        method3( ).
    ENDMETHOD.

    METHOD method3.
        "Logic
    ENDMETHOD.
ENDCLASS.

メソッド呼び出しの例:

DATA lo_abap_class TYPE REF TO lcl_abap_class.
CREATE OBJECT lo_abap_class. "Constructor call
lo_abap_class->method1( ).

パラメータ付きメソッド(インポート、変更、エクスポート)

クラスの実装:

CLASS lcl_abap_class DEFINITION.
  PRIVATE SECTION.
    METHODS method1 IMPORTING iv_string TYPE string
                     CHANGING cv_string TYPE string
                    EXPORTING ev_string TYPE string.
ENDCLASS.

CLASS lcl_abap_class IMPLEMENTATION.
    METHOD method1.
        cv_string = iv_string.
        ev_string = 'example'.
    ENDMETHOD.
ENDCLASS.

メソッド呼び出しの例:

method1 (
  EXPORTING iv_string = lv_string
  IMPORTING ev_string = lv_string2
   CHANGING cv_string = lv_string3
).

パラメータを返すメソッド

クラスの実装:

CLASS lcl_abap_class DEFINITION.
  PRIVATE SECTION.
    METHODS method1 RETURNING VALUE(rv_string) TYPE string.
ENDCLASS.

CLASS lcl_abap_class IMPLEMENTATION.
    METHOD method1.
        rv_string = 'returned value'.
    ENDMETHOD.
ENDCLASS.

メソッド呼び出しの例:

lv_string = method1( ).

RETURNING宣言されたパラメータは値だけで渡されることに注意してください。

継承 - 定義

情報

継承を使用すると、既存のクラスから新しいクラスを派生させることができます。これを行うには、 INHERITING FROM追加

スーパークラスから 継承する クラスのサブクラスの定義

ステートメント。新しいクラスのサブクラスは、既存のクラスのスーパークラスのすべてのコンポーネントを継承します。新しいクラスは、それが派生したクラスのサブクラスと呼ばれます。元のクラスは新しいクラスのスーパークラスと呼ばれます。クラスは複数の直接サブクラスを持つことができますが、1つの直接スーパークラスしか持てません。

クラスの実装

CLASS lcl_vehicle DEFINITION.
ENDCLASS.

CLASS lcl_vehicle IMPLEMENTATION.
ENDCLASS.

CLASS lcl_car DEFINITION INHERITING FROM lcl_vehicle.
ENDCLASS.

CLASS lcl_car IMPLEMENTATION.
ENDCLASS.

継承 - 抽象メソッドと最終メソッドとクラス

情報

METHODSおよびCLASSステートメントに対するABSTRACTおよびFINALの追加により、抽象メソッドおよび最終メソッドまたはクラスを定義できます。

抽象メソッドは抽象クラスで定義され、そのクラスでは実装できません。代わりに、クラスのサブクラスに実装されています。抽象クラスはインスタンス化できません。

サブクラスで最終的なメソッドを再定義することはできません。最終クラスはサブクラスを持つことができません。彼らは継承ツリーを締結します。


クラスの実装:

CLASS lcl_abstract DEFINITION ABSTRACT.
    PUBLIC SECTION.
        METHODS: abstract_method ABSTRACT,
                 final_method FINAL
                 normal_method.
                
ENDCLASS.

CLASS lcl_abstract IMPLEMENTATION.
    METHOD final_method.
        "This method can't be redefined in child class!
    ENDMETHOD.

    METHOD normal_method.
        "Some logic
    ENDMETHOD.

        "We can't implement abstract_method here!

ENDCLASS.

CLASS lcl_abap_class DEFINITION INHERITING FROM lcl_abstract.
    PUBLIC SECTION.
        METHODS: abstract_method REDEFINITION,
                 abap_class_method.
ENDCLASS.

CLASS lcl_abap_class IMPLEMENTATION.
    METHOD abstract_method.
        "Abstract method implementation
    ENDMETHOD.

    METHOD abap_class_method.
        "Logic
    ENDMETHOD.
ENDCLASS.

メソッド呼び出しの例:

DATA lo_class TYPE REF TO lcl_abap_class.
CREATE OBJECT lo_class.

lo_class->abstract_method( ).
lo_class->normal_method( ).
lo_class->abap_class_method( ).
lo_class->final_method( ).


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow