更新時間:2022-07-29 10:13:12 來源:動力節(jié)點 瀏覽1037次
從子類構造函數(shù)顯式調(diào)用每個超類構造函數(shù)使您能夠:
將參數(shù)傳遞給超類構造函數(shù)
控制MATLAB®調(diào)用超類構造函數(shù)的順序
如果您沒有從子類構造函數(shù)顯式調(diào)用超類構造函數(shù),MATLAB 會隱式調(diào)用這些不帶參數(shù)的構造函數(shù)。超類構造函數(shù)必須支持無參數(shù)語法以支持隱式調(diào)用,并且構造函數(shù)按照它們出現(xiàn)在類塊頂部的順序從左到右被調(diào)用。要更改 MATLAB 調(diào)用構造函數(shù)或使用參數(shù)調(diào)用構造函數(shù)的順序,請從子類構造函數(shù)顯式調(diào)用超類構造函數(shù)。
如果不定義子類構造函數(shù),則可以使用超類參數(shù)調(diào)用默認構造函數(shù)。
要在子類構造函數(shù)中調(diào)用每個超類的構造函數(shù),請使用以下語法:
obj@SuperClass1(args,...);
...
obj@SuperclassN(args,...);
其中obj是子類構造函數(shù)的輸出,SuperClass...是超類的名稱,并且args是相應超類構造函數(shù)所需的任何參數(shù)。
例如,類定義的以下部分顯示了一個名為Stocks的類是一個名為的類的子類Assets。
classdef Stocks < Assets
方法
function s = Stocks(asset_args, ... )
if nargin == 0
% 為asset_args 賦值
end
% 調(diào)用資產(chǎn)構造函數(shù)
s@Assets(asset_args);
...
結束
結束
結束
引用包中包含的超類
如果超類包含在包中,請包含包名。例如,Assests該類在finance包中:
classdef Stocks < finance.Assets
方法
function s = Stocks(asset_args, ... )
if nargin == 0
...
end
% 調(diào)用資產(chǎn)構造函數(shù)
s@finance.Assets(asset_args);
...
結束
結束
結束
使用多個超類初始化對象
要從多個超類派生一個類,請通過調(diào)用每個超類構造函數(shù)來初始化子類對象:
classdef Stocks < finance.Assets & Taxable
methods
function s = Stocks(asset_args,tax_args, ... )
if nargin == 0
...
end
% 調(diào)用資產(chǎn)和成員類構造函數(shù)
s@finance.Assets(asset_args)
s@Taxable(tax_args)
...
結束
結束
結束
為確保您的類構造函數(shù)支持零參數(shù)語法,請在調(diào)用超類構造函數(shù)之前為輸入?yún)?shù)變量分配默認值。您不能對超類構造函數(shù)的子類調(diào)用進行條件化。在任何條件代碼塊之外找到對超類構造函數(shù)的調(diào)用。
例如,Stocks類構造函數(shù)支持該語句的無參數(shù)情況,但在代碼塊if之外調(diào)用超類構造函數(shù)。if
classdef Stocks <
Finance.Assets屬性
股數(shù)
象征
結束
方法
function s = Stocks(description,numshares,symbol)
if nargin == 0
描述= '' ;
股數(shù) = 0;
符號 = '' ;
結尾
s@finance.Assets(描述);
s.NumShares = numshares;
s.Symbol = 符號;
結束
結束
結束
僅從子類構造函數(shù)調(diào)用直接超類構造函數(shù)。例如,假設類B派生自類A,類C派生自類B。類的構造函數(shù)C不能調(diào)用類的構造函數(shù)A來初始化屬性。類B必須初始化類A屬性。
下面的 classes A、B和的實現(xiàn)C展示了如何在每個類中設計這種關系。
類A定義屬性x和y,但僅將值分配給x:
類定義A
屬性
X
是的
結束
方法
函數(shù)obj = A(x)
...
obj.x = x;
結束
結束
結束
類B繼承屬性x和y類A。類B構造函數(shù)調(diào)用類A構造函數(shù)進行初始化x,然后給y.
classdef B < A
方法
函數(shù)obj = B(x,y)
...
obj@A(x);
obj.y = y;
結束
結束
結束
類C接受屬性x和的y值,并將這些值傳遞給類B構造函數(shù),后者又調(diào)用類A構造函數(shù):
classdef C < B
方法
函數(shù)obj = C(x,y)
...
obj@B(x,y);
結束
結束
結束