主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

許可されたサブクラスの指定

基礎知識

この節では,以下の内容について理解していることを前提に説明を進めます。

許可されたサブクラスを制御する理由

クラス定義で,サブクラスとして許可するクラスの一覧を指定できます。一覧に含まれないクラスは,クラスのサブクラスとして定義できません。許可されたサブクラスを指定するには,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...结束

シールされたクラス階層を使うと,閉じたクラスシステムを維持しながら,設計に必要な抽象化のレベルを使用できます。

関連するトピック