Если самый определенный класс объекта не задает loadobj
или метод saveobj
, этот класс может наследовать loadobj
или методы saveobj
от суперкласса.
Если какой-либо класс в иерархии задает методы loadobj
или saveobj
:
Задайте 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
от подкласса методы loadobj
и saveobj
.
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