Если самый конкретный класс объекта не задает 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
) определения показывают, как кодировать эти методы.
The 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