Sap-abap-inheritance

提供:Dev Guides
移動先:案内検索

SAP ABAP-継承

オブジェクト指向プログラミングで最も重要な概念の1つは、継承の概念です。 継承を使用すると、クラスを別のクラスの観点から定義でき、アプリケーションの作成と保守が簡単になります。 これにより、コード機能を再利用して実装時間を短縮することもできます。

クラスを作成するとき、プログラマは完全に新しいデータメンバーとメソッドを記述する代わりに、新しいクラスが既存のクラスのメンバーを継承するように指定できます。 この既存のクラスは「ベースクラス」または「スーパークラス」と呼ばれ、新しいクラスは「派生クラス」または「サブクラス」と呼ばれます。

  • あるクラスのオブジェクトは、別のクラスのプロパティを取得できます。
  • 派生クラスは、スーパークラスのデータとメソッドを継承します。 ただし、メソッドを上書きしたり、新しいメソッドを追加したりできます。
  • 継承の主な利点は再利用性です。

継承関係は、クラス定義ステートメントに「INHERITING FROM」オプションを使用して指定されます。

以下は構文です-

CLASS <subclass> DEFINITION INHERITING FROM <superclass>.

Report ZINHERITAN_1.
CLASS Parent Definition.
PUBLIC Section.
Data: w_public(25) Value 'This is public data'.
Methods: ParentM.
ENDCLASS.

CLASS Child Definition Inheriting From Parent.
PUBLIC Section.
Methods: ChildM.
ENDCLASS.

CLASS Parent Implementation.
Method ParentM.
Write/: w_public.
EndMethod. ENDCLASS.

CLASS Child Implementation.
Method ChildM.
Skip.
Write/: 'Method in child class', w_public.
EndMethod.
ENDCLASS.

Start-of-selection.
Data: Parent Type Ref To Parent,
Child Type Ref To Child.
Create Object: Parent, Child.
Call Method: Parent→ParentM,
child→ChildM.

上記のコードは、次の出力を生成します-

This is public data
Method in child class
This is public data

アクセス制御と継承

派生クラスは、その基本クラスのすべての非プライベートメンバーにアクセスできます。 したがって、サブクラスのメンバー関数にアクセスできないはずのスーパークラスのメンバーは、スーパークラスでprivateと宣言する必要があります。 私たちは、次の方法でそれらにアクセスできる人に応じてさまざまなアクセスタイプを要約することができます-

Access Public Protected Private
Same calss Yes Yes Yes
Derived class Yes Yes No
Outside class Yes No No

スーパークラスからクラスを派生させる場合、パブリック、保護、またはプライベート継承を介して継承できます。 継承のタイプは、上記のようにアクセス指定子によって指定されます。 保護された継承またはプライベートな継承はほとんど使用しませんが、パブリックな継承が一般的に使用されます。 異なるタイプの継承を使用している場合、次のルールが適用されます。

  • パブリック継承-クラスをパブリックスーパークラスから派生させると、スーパークラスのパブリックメンバーはサブクラスのパブリックメンバーになり、スーパークラスの保護メンバーはサブクラスの保護メンバーになります。 スーパークラスのプライベートメンバーは、サブクラスから直接アクセスすることはできませんが、スーパークラスのパブリックおよび保護されたメンバーへの呼び出しを介してアクセスできます。
  • Protected Inheritance -保護されたスーパークラスから派生する場合、スーパークラスのパブリックおよび保護されたメンバーはサブクラスの保護されたメンバーになります。
  • Private Inheritance -プライベートスーパークラスから派生する場合、スーパークラスのパブリックメンバーと保護メンバーはサブクラスのプライベートメンバーになります。

サブクラスのメソッドの再定義

スーパークラスのメソッドは、サブクラスで再実装できます。 メソッドを再定義するいくつかのルール-

  • 継承されたメソッドの再定義ステートメントは、元のメソッドの定義と同じセクションにある必要があります。
  • メソッドを再定義する場合、サブクラスでそのインターフェイスを再度入力する必要はなく、メソッドの名前のみを入力する必要があります。
  • 再定義されたメソッド内で、スーパー参照を使用して直接スーパークラスのコンポーネントにアクセスできます。
  • 疑似参照superは、再定義されたメソッドでのみ使用できます。

Report Zinheri_Redefine.
CLASS super_class Definition.
Public Section.
Methods: Addition1 importing g_a TYPE I
                             g_b TYPE I
           exporting g_c TYPE I.
ENDCLASS.

CLASS super_class Implementation.
Method Addition1.
g_c = g_a + g_b.
EndMethod.
ENDCLASS.

CLASS sub_class Definition Inheriting From super_class.
Public Section.
METHODS: Addition1 Redefinition.
ENDCLASS.

CLASS sub_class Implementation.
Method Addition1.
g_c = g_a + g_b + 10.
EndMethod.
ENDCLASS.

Start-Of-Selection.
Parameters: P_a Type I, P_b TYPE I.
Data: H_Addition1 TYPE I.
Data: H_Sub TYPE I.
Data: Ref1 TYPE Ref TO sub_class.
Create Object Ref1.
Call Method Ref1→Addition1 exporting g_a = P_a
                                     g_b = P_b
                   Importing g_c = H_Addition1.
Write:/H_Addition1.

F8を実行した後、値9と10を入力すると、上記のコードは次の出力を生成します-

再実装されたosサブクラス

Redefinition Demo
29