调用超类构造函数

时间:2013-07-19 19:47:27

标签: matlab oop constructor superclass matlab-class

我读了this documentation page关于如何从子类调用超类构造函数的内容。他们提到的语法是:

obj = obj@MySuperClass(SuperClassArguments);

我想知道上面语法中@符号的用途是什么。 @符号在语法中只是一个毫无意义的占位符,@符号是否代表MATLAB中的function handle symbol

如果我使用:

obj = MySuperClass(SuperClassArguments); 

而不是

obj = obj@MySuperClass(SuperClassArguments);

它仍然可以正常工作。那么使用@符号的目的是什么?

1 个答案:

答案 0 :(得分:6)

1)这与function handles无关,这是用于call the superclass constructor

的语法

2)你可以尝试一下,亲眼看看。这是一个例子:

A.M

classdef A < handle
    properties
        a = 1
    end
    methods
        function obj = A()
            disp('A ctor')
        end
    end
end

B.m

classdef B < A
    properties
        b = 2
    end
    methods
        function obj = B()
            obj = obj@A();        %# correct way
            %#obj = A();          %# wrong way
            disp('B ctor')
        end
    end
end

使用正确的语法,我们得到:

>> b = B()
A ctor
B ctor
b = 
  B with properties:

    b: 2
    a: 1

如果使用注释行而不是第一行,则会出现以下错误:

>> clear classes
>> b = B()
A ctor
A ctor
B ctor
When constructing an instance of class 'B', the constructor must preserve the class of the returned
object.
Error in B (line 8)
            disp('B ctor')