Если наиболее определенный класс объекта не определяет 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