方法调用

确定哪些方法被调用

当MATLAB®调用该具有一个参数列表通常的方法,它使用以下标准来确定何种方法来呼叫

  • 类,其类没有被指定为逊色于任何其它参数的类被选择作为统治阶级和被调用它的方法最左边的说法。

  • 如果这个类没有定义调用的方法,然后用该名称的功能是MATLAB路径上被调用。

  • 如果没有这样的功能存在,MATLAB发出指示统治阶级没有定义命名方法的错误。

显性参数

MATLAB的使用占主导地位的说法调度,以确定调用方法的哪个版本。在方法调度,MATLAB决定从调用的参数中的统治阶级。在一般情况下,所有的MATLAB类中使用的定义classdef语法具有用于方法调度的目的,相同的优先级。

类使用定义classdef语法优先于这些MATLAB类:

Int64的UINT64INT32UINT32INT16UINT16INT8UINT8烧焦合乎逻辑细胞结构function_handle

一般来说,当两个或更多个对象参数列表的一部分,为类最左边的对象的定义的方法被调用。但是,用户定义的类可以指定特定类的相对优势。有关详细信息,请参阅优先级

例如,假设CLASSA定义CLASSB作为劣,并假设这两个类定义了一个称为方法结合

调用该方法用的目的CLASSBCLASSA

结合(B,A)

实际调用结合的方法CLASSA因为一个是占主导地位的说法。

点符号与函数符号

MATLAB类支持的功能和点记万博1manbetx号语法调用方法。例如,如果为setColor是类对象的方法X,然后调用为setColor与函数符号是:

X =的setColor(X,'红');

使用点符号的等效方法调用:

X = X.setColor('红'

然而,在某些情况下,点号的结果可以相对于MATLAB如何调度工作不同:

  • 如果存在超载的subsref,可以随时使用点符号调用。也就是说,该语句是第一次测试,看它是否被标注分配。

  • 如果没有超载的subsref, 然后为setColor必须是一个方法X。普通函数或类构造函数使用这个符号不会被调用。

  • 只有参数X(与点的左侧)被用于调度。没有其他的参数,即使占优势,被认为是。因此点符号只能拨打方法X;其他参数的方法永远不会被调用。

情况下的结果是不同的。这里是其中点和功能表示法可以给出不同的结果的情况下的一个例子。假设你有以下类别:

  • CLASSA定义了一个名为方法了methodA需要的一个目的CLASSB作为它的一个参数

  • CLASSB定义CLASSA劣于CLASSB

classdef(InferiorClasses = {?CLASSA})CLASSB ...结束

了methodA方法与两个输入参数,其中之一是一个对象定义CLASSB

classdefCLASSA方法功能了methodA(OBJ,obj_classB)...结束结束

CLASSB不使用相同的名称定义一个方法了methodA。因此,下面的语法使MATLAB搜索路径的函数具有相同的名称为了methodA因为第二个参数是显性类的对象。如果路径上存在该名称的功能,那么MATLAB尝试调用而不是方法此功能CLASSA而最有可能返回一个语法错误。

OBJ = CLASSA(...);了methodA(OBJ,obj_classB)

点符号是其行为严格。例如,这个调用了methodA

OBJ = CLASSA(...);obj.methodA(obj_classB)

只能调用了methodA类的OBJ

引用与表达,动态参考名称

可以使用在表达式引用对象的属性或方法点括号语法:

OBJ。(表达

表达式计算结果必须为烧焦载体,其是属性或方法的名称。例如,下面的语句是等价的:

obj.Property1 OBJ。( 'Property1')

在这种情况下,OBJ是一个类的一个对象,它定义了一个名为属性Property1。因此,你可以通过一个烧焦变量在括号参考属性:

PROPNAME = 'Property1';物镜。(PROPNAME)

你可以调用一个方法,并传递输入参数使用另一组括号的方法:

OBJ。(表达)(ARG1,ARG2,...)

使用这个符号,就可以使属性和方法的动态引用以同样的方式,你可以创建领域的动态引用结构

作为一个例子,假设一个对象具有对应于一周的每一天的方法。这些方法具有相同的名称作为一周的天(星期一星期二, 等等)。此外,方法为取烧焦矢量输入参数,月(日期)的当日。现在假设你写,你要调用当天的正确方法的功能。

使用与创建一个表达式日期datestr功能:

OBJ(datestr(日期,'dddd完整'))(datestr(日期,'DD'))

表达方式datestr(日期, 'dddd完整')返回当前日期为烧焦向量。例如:

datestr(日期,'dddd完整')ANS =周二

表达方式datestr(日期, 'DD')返回当前日期为烧焦向量。例如:

datestr(日期,'DD')ANS = 11

因此,在使用点括号中的表达式(称为周二11)是等价的:

obj.Tuesday('11'

索引方法调用的结果

您可以使用点索引到一个方法调用的结果获得的值。例如,这个类定义的属性和构造函数方法。构造函数设置使用输入参数计算表达式后的物性值。

classdefpolyEval性能结果结束方法功能OBJ = polyEval(x)的如果nargin obj.Result = 2 *的x ^ 3 + 7 * X ^ 2 + 2 * X + 7。;结束结束结束结束

您可以索引到一个调用构造方法的结果来访问属性的值。例如,这个调用polyEval()返回分配给该属性的值。的实例polyEval类被创建为临时变量和不保存在工作区中。

polyEval(-3.5)。结果
ANS = 0

在这种情况下,表达,polyEval(-3.5)。结果代表值0(价值-3.5是多项式的根目录)。您可以将这个表达式计算到一个变量的结果或其他表达式中使用它。

可以点的索引,用于返回该点索引被定义,如一个对象或结构,其可以利用一个属性或字段名进行索引的结果的任何方法的结果。您必须在所有索引表达式中括号,即使没有参数。例如,索引到的一个呼叫的结果polyEval()构造在没有输入的,使用此表达式。

polyEval()。结果

有关索引到的函数调用结果的详细信息,请参阅索引到函数调用结果

控制访问方法

可以有,你要创建的类中的内部计算方法的情况,但不希望公布这些方法作为公共接口的类的一部分。在这种情况下,你可以使用访问属性来设置访问下列选项之一:

  • 上市- 具有访问类可以访问此方法(默认值)的一个对象中的任何代码。

  • 私人的- 到定义类,但不包括亚类限制方法的访问。子类不继承私有方法。

  • 保护- 限制方法来定义类和亚类从定义类派生的访问。类继承此方法。

  • 访问列表 - 限制方法访问类的访问列表。欲了解更多信息,请参阅类成员访问

该方法的文件内本地和嵌套函数具有相同的访问方法。一个类定义文件内本地函数必须在同一个文件中定义的类的私人通道。

调用父类方法在子类的方法

子类可以覆盖超类中定义的方法的实施。如果子类方法需要的完全替换超类方法,而不是执行其他代码。MATLAB类可以使用的超类方法调用的特殊语法从同名方法的子类实现。

调用子类中的一类超类方法的语法使用@符号:

方法名@SuperclassName

例如,下面的DISP方法对于限定股票每个从派生的类财富类。该方法首先调用财富DISP方法,并传递股票对象,以使财富的组分股票可以显示的对象。之后财富DISP方法返回时,股票DISP方法显示两个股票特性:

classdef股票<资产方法功能DISP(S)DISP @资产(一个或多个)%呼叫基础类DISP方法首先fprintf中(1,'股数:%G \ nShare价格:3.2F%\ n'... s.NumShares,s.SharePrice);结束%DISP结束结束

使用限制

以下限制适用于调用父类的方法。您可以使用只在这个符号:

  • 具有相同的名称要调用父类方法的方法

  • 一类就是它的方法要调用父类的子类

调用内置函数

在MATLAB内置功能使您能够调用内置的已经通过重载的方法的功能的版本。

相关话题