设计子类构造函数的介绍 - 极悦
首页 课程 师资 教程 报名

设计子类构造函数的介绍

  • 2022-07-29 10:13:12
  • 779次 极悦

显式调用超类构造函数

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

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

控制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大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交