Если самый определенный класс объекта не задает loadobj
или saveobj
метод, этот класс может наследовать loadobj
или saveobj
методы от суперкласса.
Если какой-либо класс в иерархии задает saveobj
или loadobj
методы:
Задайте saveobj
для всех классов в иерархии.
Вызовите суперкласс saveobj
методы от подкласса saveobj
метод, потому что save
вызовы функции только самый определенный saveobj
метод.
Подкласс loadobj
метод может вызвать суперкласс loadobj
, или другие методы как требуется, чтобы присвоить значения их свойствам.
Восстановление Объекта Подкласса от Сохраненного struct
Предположим, что вы хотите сохранить объект подкласса первым преобразованием его данных о свойстве к struct
в классе saveobj
метод. Затем вы восстанавливаете объект, загружено с помощью его loadobj
метод. Это действие требует что:
Суперклассы реализуют saveobj
методы, чтобы сохранить их данные о свойстве в struct
.
Подкласс saveobj
вызовы метода каждый суперкласс saveobj
метод и возвращает завершенный struct
к save
функция. Затем save
функционируйте пишет struct
к MAT-файлу.
Подкласс loadobj
метод создает объект подкласса и вызывает методы суперкласса присвоить их значения свойств в объекте подкласса.
Подкласс loadobj
метод возвращает восстановленный объект в load
функция, которая загружает объект в рабочую область.
Следующий суперкласс (MySuper
) и подкласс (MySub
) определения показывают, как закодировать эти методы.
MySuper
класс задает loadobj
метод, чтобы включить объекту этого класса загрузиться непосредственно.
Подкласс loadobj
вызовы метода метод под названием reload
после того, как это создает объект подкласса.
reload
первые вызовы суперкласс reload
метод, чтобы присвоить значения свойств суперкласса и затем присваивает значение свойства подкласса.
classdef MySuper properties X Y end methods function S = saveobj(obj) S.PointX = obj.X; S.PointY = obj.Y; end function obj = reload(obj,S) obj.X = S.PointX; obj.Y = S.PointY; end end methods (Static) function obj = loadobj(S) if isstruct(s) obj = MySuper; obj = reload(obj,S); end end end end
Вызовите суперкласс saveobj
и loadobj
методы от подкласса saveobj
и loadobj
методы.
classdef MySub < MySuper properties Z end methods function S = saveobj(obj) S = saveobj@MySuper(obj); S.PointZ = obj.Z; end function obj = reload(obj,S) obj = reload@MySuper(obj,S); obj.Z = S.PointZ; end end methods (Static) function obj = loadobj(S) if isstruct(s) obj = MySub; obj = reload(obj,S); end end end end