How do I reference a super class of a superclass object?

3 views (last 30 days)
I have a subclass of a superclass of a superclass. The two levels up superclass owns a property that has a set method defined. I'd like to have the subclass also act on the setting of the super-superclass property. I thought I'd use a property listener in the subclass that was listening to the super-superclass's property. The problem I'm having is syntax. What's the syntax for event.proplistener? How do I reference a super-super class instance or object? Or, do I need to?
I've tried: Obj.RecordNameListener = ... event.proplistener(Obj,'RecordName','PostSet',@Obj.OnRecordNameChanged);
Where Obj is the subclass object reference. But i really shouldn't be listening to myself I should be listening to my super-super class:
Obj@FirstLevelSuperClass@SecondLevelSuperClass doesn't work
Is this a good approach?
Thanks in advance.

Accepted Answer

Patrick Kalita
Patrick Kalita on 28 Jun 2011
I find that using the predefined set methods (i.e. function set.Foo(obj,value)) are convenient in simple scenarios, but for reasonably complex cases like this it is just easier to define your own setter methods. Then you'd call the method to set the property instead of accessing the property directly. Here's a simple example:
classdef SuperSuper < handle
properties
TheProperty
end
methods
function setTheProperty(self, val)
% Notice no dot in the function name
disp('SuperSuper setter!');
self.TheProperty = val;
end
end
end
classdef Super < SuperSuper
end
classdef Base < Super
methods
function setTheProperty(self, val)
setTheProperty@SuperSuper(self, val);
disp('Base setter!');
self.TheProperty = val;
end
end
end
Usage:
>> B = Base;
>> B.setTheProperty(5)
SuperSuper setter!
Base setter!
>> B.TheProperty
ans =
5
>>
  3 Comments
Daniel Shub
Daniel Shub on 29 Jun 2011
I am not sure, but I don't think you want (or need to do this). I believe setTheProperty should be an inherited method of Super, therefore you can call setTheProperty@Super(self, val). The advantage of this is that if in the future Super overloads setTheProperty, Base will not skip it. Further, instead of defining your own setters, you can use subsref to intercept the call to set.TheProperty (notice the dot).

Sign in to comment.

More Answers (0)

Categories

Find more on Scripts in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!