2013-12-07 4 views
1

У меня есть следующая проблема. У меня есть три класса: A, B и C. A - это базовый класс, B наследует A и C наследует B.Вызов суперкласса MATLAB суперкласса конструктора

У каждого есть конструктор, который принимает много аргументов. Тем не менее, конструктор для B выполняет несколько шагов, которые мне не нужны в C, которые я не могу отменить, если я не добавлю больше кода интерфейса, который бы разрушил инкапсуляцию для нескольких переменных. А именно, я бы дал пользователю моего класса возможность изменить несколько переменных, которые я им не хочу.

В результате я думал, что буду умным и попробую назвать конструктор A с C. Однако MATLAB это не нравится. См. Код ниже.

classdef C < B 
    % properties go here 
    % ... 
    methods(Access = public) 
    function obj = C(arguments) 
     obj = [email protected](A's arguments); % MATLAB doesn't like this 
     % ... 
    end 
    end 

Итак, как я могу (или не могу), вызвать конструктор в A?

ответ

2

конструктор B делает несколько шагов, которые я не хочу в C

В этом случае, ваш C не является B. Если конструктор из B не выполняется в строительстве процесс C, то C не может быть допустимым объектом класса B. Однако это отношение имеет наследование.

Таким образом, наследование C < B является неправильным. Вы должны наследовать C от A.

Если вы действительно хотите, я бы попытался реализовать (в основном пустой) защищенный конструктор в B, который затем вызывается из C. Не совсем уверен, что работает в Matlab.

+0

ничего себе, как я пропустил это! Благодаря! Конечно, B "является" A, но C "не является" B. Спасибо за улов! –

Смежные вопросы