St-Ste-Ste-Stephen
St-Ste-Ste-Stephen

Reputation: 1076

Interfacing with super and subclass constructors

I have had trouble finding help in the matlab documentation and previous questions about using matlab inheritance and class constructors to make an interface. To make it tidy, within a package.

Instead of dragging through my code I can condense it as follows:

A package +MyPkg has a superclass Super and a few subclasses Sub1 Sub2... Most of my properties and methods are defined in Super such that Sub1 and Sub2 really only exist to use their constructors for simple routines or perhaps a few methods overloaded from Super.

So how do I go about writing the classdefs and constructors to support an interface where I can use the following calls:

a = MyPkg.Super(args).Sub1(args)
b = MyPkg.Super(args).Sub1(args).Sub1Method

In this case I want to keep arguments related to Super apart from arguments related to Sub1 for readability and organization.

Questions are welcome.

EDIT:

After considering the accepted answer below and some browsing I reached the conclusion that the interface shown above is not really in the spirit of OO and, for my data analysis application of it a more proper way to approach it would consist of a handle class with a constructor that populates an object or cell array of object properties. Because the class is a handle class one can then use the methods on it to produce desired methods. i.e. the following

% in +MyPkg\

classdef Super < handle
    properties
        outputArray
    end
    methods

    function self = Super(args)
        self.outputArray=load_values(args);
    end

    function out = do_analysis(self,params)
        % do some analysis
    end

    end
end

Then to use this:

data1 = MyPkg.Super(args)
% Populate the outputArray
analysis1 = data1.do_analysis(params)

etc.,

Hope that helps someone else dealing with these issues

Upvotes: 4

Views: 881

Answers (1)

Marc
Marc

Reputation: 3313

With respect to your question, you can't if you use inheritance. Only direct superclass constructors can be called from subclasses and only from the subclass can you call the superclass constructor. Ref.

Exposing the superclass like that really breaks the fundamentals of inheritance. Maybe ou should be thinking of another model, maybe composition ("has a" instead of "is a"), if you need that kind of access?

Upvotes: 2

Related Questions