Они не должны быть публичными, но они должны быть доступны для подкласса и суперкласса, и, как говорится в сообщении об ошибке, они должны быть одинаковыми. Итак, у вас есть 2 вопроса:
- Метод вашего суперкласса является общедоступным, а метод вашего подкласса - приватным
- Вы не можете просто установить метод суперкласса на private, или у подкласса его нет.
Вы хотите установить Access = protected
, что означает, что только суперкласс и подклассы имеют видимость функции, поэтому они имеют одинаковые права доступа, могут задавать свое поведение и функция скрыта от других объектов.
Вот опции Access
, с определениями из документации :
- общедоступный - неограниченный доступ
- защищен - доступ из методов в классе или подклассах
- private - доступ только по методам класса ( не из подклассов )
Итак, ваши уроки становятся:
classdef (Abstract) super
methods (Abstract = true, Access = protected)
out = fun(obj,in)
end
end
classdef sub < super
properties
prop
end
methods (Access = protected)
function out = fun(obj,in)
out = obj.prop * in;
end
end
end
Обратите внимание, что синтаксис Access = protected
, а не Access = 'protected'
, как вы показали.