从子类构造函数显式调用每个超类构造函数使您能够:
将参数传递给超类构造函数
控制MATLAB®调用超类构造函数的顺序
如果您没有从子类构造函数显式调用超类构造函数,MATLAB 会隐式调用这些不带参数的构造函数。超类构造函数必须支持无参数语法以支持隐式调用,并且构造函数按照它们出现在类块顶部的顺序从左到右被调用。要更改 MATLAB 调用构造函数或使用参数调用构造函数的顺序,请从子类构造函数显式调用超类构造函数。
如果不定义子类构造函数,则可以使用超类参数调用默认构造函数。
要在子类构造函数中调用每个超类的构造函数,请使用以下语法:
obj@SuperClass1(args,...);
...
obj@SuperclassN(args,...);
其中obj是子类构造函数的输出,SuperClass...是超类的名称,并且args是相应超类构造函数所需的任何参数。
例如,类定义的以下部分显示了一个名为Stocks的类是一个名为的类的子类Assets。
classdef Stocks < Assets
方法
function s = Stocks(asset_args, ... )
if nargin == 0
% 为asset_args 赋值
end
% 调用资产构造函数
s@Assets(asset_args);
...
结束
结束
结束
引用包中包含的超类
如果超类包含在包中,请包含包名。例如,Assests该类在finance包中:
classdef Stocks < finance.Assets
方法
function s = Stocks(asset_args, ... )
if nargin == 0
...
end
% 调用资产构造函数
[email protected](asset_args);
...
结束
结束
结束
使用多个超类初始化对象
要从多个超类派生一个类,请通过调用每个超类构造函数来初始化子类对象:
classdef Stocks < finance.Assets & Taxable
methods
function s = Stocks(asset_args,tax_args, ... )
if nargin == 0
...
end
% 调用资产和成员类构造函数
[email protected](asset_args)
s@Taxable(tax_args)
...
结束
结束
结束
为确保您的类构造函数支持零参数语法,请在调用超类构造函数之前为输入参数变量分配默认值。您不能对超类构造函数的子类调用进行条件化。在任何条件代码块之外找到对超类构造函数的调用。
例如,Stocks类构造函数支持该语句的无参数情况,但在代码块if之外调用超类构造函数。if
classdef Stocks <
Finance.Assets属性
股数
象征
结束
方法
function s = Stocks(description,numshares,symbol)
if nargin == 0
描述= '' ;
股数 = 0;
符号 = '' ;
结尾
[email protected](描述);
s.NumShares = numshares;
s.Symbol = 符号;
结束
结束
结束
仅从子类构造函数调用直接超类构造函数。例如,假设类B派生自类A,类C派生自类B。类的构造函数C不能调用类的构造函数A来初始化属性。类B必须初始化类A属性。
下面的 classes A、B和的实现C展示了如何在每个类中设计这种关系。
类A定义属性x和y,但仅将值分配给x:
类定义A
属性
X
是的
结束
方法
函数obj = A(x)
...
obj.x = x;
结束
结束
结束
类B继承属性x和y类A。类B构造函数调用类A构造函数进行初始化x,然后给y.
classdef B < A
方法
函数obj = B(x,y)
...
obj@A(x);
obj.y = y;
结束
结束
结束
类C接受属性x和的y值,并将这些值传递给类B构造函数,后者又调用类A构造函数:
classdef C < B
方法
函数obj = C(x,y)
...
obj@B(x,y);
结束
结束
结束
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习