このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この節では,以下の内容について理解していることを前提に説明を進めます。
クラス定義で,サブクラスとして許可するクラスの一覧を指定できます。一覧に含まれないクラスは,クラスのサブクラスとして定義できません。許可されたサブクラスを指定するには,AllowedSubclasses
クラス属性を使用します。
AllowedSubclasses
属性は,サブクラス化を許可しない密封
クラスと,サブクラス化を制限しない既定の動作との間の設計点を提供します。
許可されたサブクラスを制御することにより,シールされたクラスの階層を作成できます。つまり,これは,特定のクラスセットが特定の基底クラスから派生することは許可するが,無制限のサブクラス化は許可しないクラスシステムです。
この手法の詳細は,クラスのシールされた階層の定義を参照してください。
meta.class
オブジェクトをAllowedSubclasses
属性に割り当てて1つまたは複数の許可されたサブクラスのリストをclassdef
ステートメントで指定します。?
演算子と次のクラス名を使って,特定のクラスを参照するmeta.class
オブジェクトを作成します。
classdef(AllowedSubclasses = ?ClassName) MySuperClass…结束
meta.class
オブジェクトの细胞配列を使って,複数の許可されたサブクラスを定義します。
classdef(allowwedsubclasses = {?ClassName1,?ClassName2,…?ClassNameN})结束
クラス名を参照するときは,常に完全修飾クラス名を使用します。
classdef(AllowedSubclasses = ?Package.SubPackage.ClassName1) MySuperClass…结束
空の细胞配列をAllowedSubclasses
属性に割り当てることは,密封
クラスを定義することと同じです。
classdef(AllowedSubclasses = {}) MySuperClass…结束
メモ
meta.class
オブジェクトの生成には,?
演算子とクラス名のみを使用します。AllowedSubclasses
属性に代入する値には,meta.class
オブジェクトまたはmeta.class
オブジェクトの细胞配列を返す関数も含めて,他のいかなるMATLAB®式も使用できません。
クラスをAllowedSubclasses
のリストに含めても,そのクラスはサブクラスとして定義されません。ユーザーにそのクラスをサブクラスとして定義するように要求もしません。リストに含めると,参照されたクラスがサブクラスとして定義できるようになるだけです。
許可されたサブクラスとしてクラスを宣言しても,このクラス自身がサブクラス化できるかどうかには影響しません。
クラス定義には,現在定義されていないクラスやMATLABパス上で利用できないクラスを参照するAllowedSubclasses
属性への割り当てを含めることができます。クラスを読み込むときに MATLAB が検出できない参照サブクラスは、エラーや警告なしにリストから事実上削除されます。MATLAB は、その後に使用可能になる場合に備えてその参照クラスを記憶します。
メモ
MATLABが許可されたサブクラスのリストからクラスを検出しない場合,そのクラスは事実上密封
になっています。シールされたクラスはAllowedSubclasses = {}
と同じです。
クラスが密封
であるか,またはAllowedSubclasses
を指定しているかを判別するには,meta.class
プロパティRestrictsSubclassing
を使用します。
AllowedSubclasses
属性を使うと,次のように,許可されたサブクラスをシールして,シールされたクラスの階層を定義できます。
classdef(AllowedSubclasses = {?SubClass1,?SubClass2})超类...结束
許可されたサブクラスを密封
として定義します。
classdef(密封)SubClass1...结束classdef(密封)SubClass2...结束
シールされたクラス階層を使うと,閉じたクラスシステムを維持しながら,設計に必要な抽象化のレベルを使用できます。