专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 设计子类构造函数的介绍

设计子类构造函数的介绍

更新时间:2022-07-29 10:13:12 来源:动力节点 浏览580次

显式调用超类构造函数

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

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

控制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 
         % 调用资产构造函数
         s@finance.Assets(asset_args);
         ...
      结束
   结束
结束

使用多个超类初始化对象

要从多个超类派生一个类,请通过调用每个超类构造函数来初始化子类对象:

classdef Stocks < finance.Assets & Taxable
    methods 
      function s = Stocks(asset_args,tax_args, ... ) 
         if nargin == 0
             ... 
         end 
         % 调用资产和成员类构造函数
         s@finance.Assets(asset_args)
         s@Taxable(tax_args)
         ...
      结束
   结束
结束

子类构造函数实现

为确保您的类构造函数支持零参数语法,请在调用超类构造函数之前为输入参数变量分配默认值。您不能对超类构造函数的子类调用进行条件化。在任何条件代码块之外找到对超类构造函数的调用。

例如,Stocks类构造函数支持该语句的无参数情况,但在代码块if之外调用超类构造函数。if

classdef Stocks <
    Finance.Assets属性
      股数
      象征
   结束
   方法
      function s = Stocks(description,numshares,symbol)
          if nargin == 0
            描述= '' ;
            股数 = 0;
            符号 = '' ;
         结尾
         s@finance.Assets(描述);
         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);
      结束
   结束
结束

 

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>