If the most specific class of an object does not define a loadobj
or saveobj
method, this class can inherit loadobj
or saveobj
methods from a superclass.
If any class in the hierarchy defines saveobj
or loadobj
methods:
Define saveobj
for all classes in the hierarchy.
Call superclass saveobj
methods from the subclass saveobj
method because the save
function calls only the most specific saveobj
method.
The subclass loadobj
method can call the superclass loadobj
, or other methods as required, to assign values to their properties.
struct
Suppose that you want to save a subclass object by first converting its property data to a struct
in the class saveobj
method. Then you reconstruct the object when loaded using its loadobj
method. This action requires that:
Superclasses implement saveobj
methods to save their property data in the struct
.
The subclass saveobj
method calls each superclass saveobj
method and returns the completed struct
to the save
function. Then the save
function writes the struct
to the MAT-file.
The subclass loadobj
method creates a subclass object and calls superclass methods to assign their property values in the subclass object.
The subclass loadobj
method returns the reconstructed object to the load
function, which loads the object into the workspace.
The following superclass (MySuper
) and subclass (MySub
) definitions show how to code these methods.
The MySuper
class defines a loadobj
method to enable an object of this class to be loaded directly.
The subclass loadobj
method calls a method named reload
after it constructs the subclass object.
reload
first calls the superclass reload
method to assign superclass property values and then assigns the subclass property value.
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
Call the superclass saveobj
and loadobj
methods from the subclass saveobj
and loadobj
methods.
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