主要内容

设计子类构造函数

显式调用超类构造函数

从子类构造函数显式地调用每个超类构造函数使您能够:

  • 将参数传递给超类构造函数

  • 用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);结束结束结束

相关的话题

Baidu
map