クラスの優先順位
クラスの優先順位の使用
MATLAB® は、クラスの優先順位を使用して、複数のクラスが同じメソッドをもつ場合に呼び出すメソッドを決定します。クラス InferiorClasses 属性を使用して、ユーザー定義クラスの相対的な優先順位を指定することができます。
クラスを下位クラスとしてマークする理由
複数のクラスが同じ名前のメソッドを定義するか、クラスが関数をオーバーロードする場合、MATLAB は優先引数に基づいてどのメソッドまたは関数を呼び出すかを決定します。MATLAB は以下のように優先引数を決定します。
引数のクラスに基づいて優先引数を決定する。
優先引数がある場合、上位クラスのメソッドを呼び出す。
引数の優先順位が等しい場合、一番左にある引数を優先引数とする。
優先引数のクラスで呼び出された関数の名前をもつメソッドが定義されていない場合、その名前のパス上の最初の関数を呼び出す。
下位クラスの属性
クラス InferiorClasses 属性を使用して、ユーザー定義クラスの相対的な優先順位を指定します。定義するクラスより下位のクラスを指定するには、クラス matlab.metadata.Class オブジェクトの cell 配列をこの属性に割り当てます。
たとえば、次の classdef では、MyClass が ClassName1 と ClassName2 より上位であることを宣言しています。
classdef (InferiorClasses = {?ClassName1,?ClassName2}) MyClass
...
end? 演算子とクラス名を組み合わせて、matlab.metadata.Class オブジェクトを作成します。metaclass を参照してください。
以下の MATLAB クラスは、常に classdef 構文で定義されたクラスよりも下位であり、このリストでは使用できません。
double、single、int64、uint64、int32、uint32、int16、uint16、int8、uint8、char、string、logical、cell、struct、および function_handle。
上位クラス
MATLAB は、式の評価に複数のクラスのオブジェクトが関与する場合に、クラス優先度を使用します。上位クラスは次のことを決めます。
複数のクラスが同じ名前のメソッドを定義するときに、呼び出すクラス メソッド。
異なるクラスのオブジェクトを組み合わせた配列のクラス (MATLAB が下位オブジェクトを上位クラスに変換できる場合)。
属性の非継承
サブクラスは、スーパークラス InferiorClasses 属性を継承しません。サブクラス InferiorClasses 属性で指定されたクラスのみが、そのサブクラス オブジェクトの下位となります。