Inheritance (クラス・キーワード)
使用法
このクラスのスーパークラスの継承順序を指定するには、以下の構文を使用します。
Class MyApp.MyClass Extends (MySuperClass1, MySuperClass2) [ Inheritance = inheritancedirection ] {
//class members
}
inheritancedirection は left または right です。このキーワードは省略することもできます。その場合、InterSystems IRIS は既定の継承順序 (left) を使用します。
すべての新規プログラミングで left の継承順序を使用することをお勧めします。
詳細
Inheritance キーワードで、多重継承によるクラスの継承順序を指定します。inheritancedirection の値に left を指定すると左から右への継承、right を指定すると右から左への継承になります。
例えば、以下のように、クラス X が、クラス A、B、および C から継承するとします。
Class X Extends (A, B, C)
{
}
クラス・コンパイラの既定の継承順序は左から右なので、スーパークラスどうしでメンバ定義に相違がある場合は、最も左に記述されたスーパークラスを優先することで解決されます (この例では、A が B と C よりも優先し、B が C よりも優先します)。
具体的には、クラス X の場合、クラス・パラメータ値、プロパティ、およびメソッドの値は、クラス A (リストの先頭にあるスーパークラス) から継承され、次にクラス B、最後にクラス C から継承されます。また、X は、A で定義されていないクラス・メンバを B から継承し、A でも B でも定義されていないクラス・メンバを C から継承します。A から既に継承したクラス・メンバと同じ名前のメンバが B にある場合、X では A から継承した値を使用します。同様に、A または B のいずれかから継承したクラス・メンバと同じ名前のメンバが C にある場合は、A、B、C の優先順位で値を使用します。
スーパークラス間で右から左への継承を指定するには、以下のように Inheritance キーワードを使用して right の値を指定します。
Class X Extends (A, B, C) [ Inheritance = right ]
{
}
右から左への継承では、複数のスーパークラスが同じ名前のメンバを持つ場合、右側のスーパークラスにあるメンバの値が優先します。
Right の継承に関する注意事項
右から左への継承でも、最も左に記述したスーパークラス (最初のスーパークラスと呼ばれることもあります) がプライマリ・スーパークラスであることは変わりません。つまり、サブクラスは最も左にあるスーパークラスからクラス・キーワード値のみを継承します。この動作はオーバーライドされません。
また、右から左への継承では、スーパークラスを変更してリコンパイルする場合、サブクラスを手動でリコンパイルする必要があります。
サブクラスへの影響
このキーワードは継承されません。
既定値
このキーワードを省略すると、継承順序は left になります。