Вызов конструктора суперкласса

Я прочитал эту страницу документации о том, как вызвать конструктор суперкласса из дочернего класса. Синтаксис, который они упоминают, таков:

obj = obj@MySuperClass(SuperClassArguments);

Мне интересно, какова цель @ Символ в приведенном выше синтаксисе Это @ символ просто бессмысленно занимает место в синтаксисе или делает @ символ представляет символ дескриптора функции в MATLAB?

Если я использую:

obj = MySuperClass(SuperClassArguments); 

вместо

obj = obj@MySuperClass(SuperClassArguments);

это все еще работает отлично. Так какова цель использования @ условное обозначение?

1 ответ

Решение

1) нет, это не имеет ничего общего с дескрипторами функций, это синтаксис, используемый для вызова конструктора суперкласса

2) вы можете попробовать и убедиться сами. Вот пример:

Am

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

Bm

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') 
Другие вопросы по тегам