主要内容

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

サブクラスコンストラクターの設計

スーパークラスコンストラクターの明示的な呼び出し

サブクラスコンストラクターから各スーパークラスコンストラクターを明示的に呼び出すと,次のことを実行できます。

  • スーパークラスコンストラクターに引数を渡す

  • MATLAB®がスーパークラスコンストラクターを呼び出す順序を制御する

サブクラスコンストラクターからスーパークラスコンストラクターを明示的に呼び出さない場合は,MATLABによって,これらのコンストラクターが引数なしで暗黙的に呼び出されます。スーパークラスコンストラクターは,暗黙的な呼び出しをサポートするために引数のない構文に対応していなければなりません。

複数のスーパークラスがある場合,MATLABは特定の呼び出し順序を保証しません。MATLABがスーパークラス コンストラクターを呼び出す順序が重要な場合は、サブクラス コンストラクターからスーパークラス コンストラクターを明示的に呼び出します。

サブクラスコンストラクターを定義しない場合は,スーパークラスの引数を指定して既定のコンストラクターを呼び出すことができます。詳細については,既定のコンストラクター継承されたコンストラクターの暗黙的な呼び出しを参照してください。

サブクラスからのスーパークラスコンストラクターの呼び出し

サブクラスコンストラクター内で各スーパークラスのコンストラクターを呼び出すには,次の構文を使用します。

obj@SuperClass1 (args…);

...

obj@SuperclassN (args…);

ここで,objはサブクラスコンストラクターの出力,超类…はスーパークラスの名前,arg游戏は対応するスーパークラスコンストラクターで必要な引数です。

たとえば,クラスを定義する以下のセグメントは,资产と呼ばれるクラスのサブクラスである,股票と呼ばれるクラスを表します。

classdef股票<资产方法函数s =股票(asset_args...如果输入参数个数= = 0%赋值给asset_args结束调用资产构造函数s@Assets (asset_args);...结束结束结束

サブクラスコンストラクターメソッドの作成については,サブクラスコンストラクターに記載しています。

パッケージに含まれるスーパークラスの参照

スーパークラスがパッケージに含まれる場合は,パッケージ名を含めます。たとえば,资产近クラスは金融パッケージ内にあります。

classdef<股票融资。资产方法函数s =股票(asset_args...如果输入参数个数= = 0...结束调用资产构造函数s@finance.Assets (asset_args);...结束结束结束

複数のスーパークラスを使用したオブジェクトの初期化

複数のスーパークラスからクラスを派生するには,各スーパークラスのコンストラクターを呼び出して,サブクラスのオブジェクトを初期化します。

classdef<股票融资。资产&应税方法函数s =股票(asset_args tax_args,...如果输入参数个数= = 0...结束%调用资产和成员类构造函数s@finance.Assets (asset_args) s@Taxable (tax_args)...结束结束结束

サブクラスコンストラクターの実装

クラスコンストラクターでゼロ引数の構文が必ずサポートされるようにするには,スーパークラスコンストラクターを呼び出す前に入力引数変数に既定値を代入します。スーパークラスコンストラクターのサブクラス呼び出しには条件を付けられません。条件付きコードブロックの外にスーパークラスコンストラクターへの呼び出しを配置します。

次の例では,股票クラスコンストラクターは如果ステートメントで引数なしのケースをサポートしますが,スーパークラスコンストラクターを如果コードブロック外で呼び出します。

classdef<股票融资。资产属性NumShares象征结束方法函数s =股票(描述、numshares符号)如果Nargin == 0 description ='';numshares = 0;符号=''结束s@finance.Assets(描述);s.NumShares = numshares;s.Symbol =符号;结束结束结束

コンストラクターから直接のスーパークラスのみを呼び出す

サブクラスコンストラクターから,直接のスーパークラスコンストラクターのみを呼び出します。たとえば,クラスBがクラス一个から派生し,クラスCはクラスBから派生するとします。クラスCのコンストラクターは,プロパティを初期化するためにクラス一个のコンストラクターを呼び出すことはできません。クラスBがクラス一个のプロパティを初期化しなければなりません。

以下では,クラス一个BCの実装で,各クラスでこの関係をどのように設計するかを示しています。

クラス一个はプロパティxyを定義しますが,xにのみ値を割り当てます。

classdef一个属性x y结束方法函数obj = (x)...obj。x= x;结束结束结束

クラスBは,クラス一个からプロパティxyを継承します。クラスBのコンストラクターは,クラス一个のコンストラクターを呼び出してxを初期化してから,yに値を割り当てます。

classdefB <方法函数obj = B (x, y)...obj@A (x);obj。y= y;结束结束结束

クラスCは,プロパティxyに対する値を受け取り,これらの値をクラスBのコンストラクターに渡します。クラスBのコンストラクターは,次にクラス一个のコンストラクターを呼び出します。

classdefC < B方法函数obj = C (x, y)...obj@B (x, y);结束结束结束

関連するトピック