设计子类构造函数
显式调用超类构造函数
从子类构造函数显式地调用每个超类构造函数使您能够:
将参数传递给超类构造函数
用MATLAB控制的顺序®调用超类构造函数
如果不从子类构造函数显式调用父类构造函数,MATLAB将隐式调用这些构造函数,不带参数。超类构造函数必须支持无参数语法以支持隐式调用,并且构造函数按照它们在类块顶部出现的顺序(从左到右)调用。若要更改MATLAB调用构造函数的顺序或使用参数调用构造函数,请从子类构造函数显式调用超类构造函数。
如果没有定义子类构造函数,则可以使用超类参数调用默认构造函数。有关更多信息,请参见默认构造函数而且对继承构造函数的隐式调用.
从子类调用父类构造函数
要在子类构造函数中调用每个超类的构造函数,请使用以下语法:
obj@SuperClass1 (args…);
...
obj@SuperclassN (args…);
在哪里obj
是子类构造函数的输出,超类…
是超类的名称,和arg游戏
是各个超类构造函数所需的任何参数。
例如,类定义的下面一段显示类调用股票
它是类的子类资产
.
classdef股票<资产方法函数s =股票(asset_args,...)如果Nargin == 0为asset_args赋值结束调用资产构造函数s@Assets (asset_args);...结束结束结束
子类的构造函数提供有关创建子类构造函数方法的详细信息。
引用包中包含的超类
如果包中包含超类,请包含包名。例如,资产近
类在金融
包:
classdef股票<金融。资产方法函数s =股票(asset_args,...)如果Nargin == 0...结束调用资产构造函数s@finance.Assets (asset_args);...结束结束结束
使用多个超类初始化对象
要从多个超类派生一个类,需要调用每个超类构造函数来初始化子类对象:
classdef股票<金融。资产&应税方法函数s =股票(asset_args,tax_args,...)如果Nargin == 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 =符号;结束结束结束
从构造函数中只调用直接超类
只从子类构造函数调用直接父类构造函数。例如,假设classB
派生自类一个
和类C
派生自类B
.类的构造函数C
不能调用类的构造函数一个
初始化属性。类B
必须初始化类一个
属性。
类的以下实现一个
,B
,C
在每个类中展示如何设计这种关系。
类一个
定义属性x
而且y
,但仅将值赋给x
:
classdef一个属性x y结束方法函数obj = A(x)...obj。x= x;结束结束结束
类B
继承属性x
而且y
从类一个
.类B
构造函数调用类一个
构造函数初始化x
然后赋值给y
.
classdefB < a方法函数obj = B(x,y)...obj@A (x);obj。y= y;结束结束结束
类C
接受属性的值x
而且y
,并将这些值传递给类B
构造函数,然后调用类一个
构造函数:
classdefC < b方法函数obj = C(x,y)...obj@B (x, y);结束结束结束