Inheritance of classes inside a package
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi,
I have run into problems when using class inheritance in combination with packages. I think it is the same issue as already asked in MATLAB newsgroup a few years ago.
First, suppose I have a bunch of files with the following structure:
./InnerClass.m
./OuterClass.m
and the following conents:
-- InnerClass.m :
classdef InnerClass
end
-- OuterClass.m :
classdef OuterClass < InnerClass
end
Now, being in the . directory, when I issue the command:
>> obj = OuterClass
I get the following answer:
obj =
OuterClass with no properties.
Methods, Superclasses
So far, so good, it works as expected.
Let's move the classes into a package, so that we would have the following structure:
./+package/InnerClass.m
./+package/OuterClass.m
Now, being in the . directory, the command
>> obj = OuterClass
ends up with an error. Of course, now the classes are part of package, we have to call it this way:
>> obj = package.OuterClass
But, GEEEEZ, I got another error message!!!
??? Error using ==> package.OuterClass
The specified super-class 'InnerClass' contains a parse error or cannot be found on MATLAB's search path, possibly shadowed by
another file with the same name.
QUESTION 1: Is this the expected behavior? If yes, what am I doing wrong???
Ok, so it seems that the OuterClass inside package somehow cannot see the definition of the InnerClass. Well, OK, so when I change the current working directory to be the +package directory and try to create the object from there, everything should work as in the beginning, right?
>> cd +package
>> obj = OuterClass
??? Undefined function or variable 'OuterClass'.
WHAT!?!?!
Question 2: Is this the expected behavior? Does the situation of the package directory being the working directory somehow change the way the source files are processed?
Question 3: I work in R2009a, is it the same in the newer versions?
I feel completely puzzled! These are really basic things and I do not understand them. Can somebody help me???
Thanks a lot,
Petr
0 Kommentare
Akzeptierte Antwort
Titus Edelhofer
am 25 Jul. 2011
Hi Petr,
interesting, I haven't tried this. What works is to treat InnerClass as part of the package, i.e.
classdef OuterClass < package.InnerClass
Then it should work. Whether functions/classes inside the package should be "freed" from the necessity to do so, I don't know ... By the way: package directory should not be the working directory, that makes things more complicated then necessary.
Titus
Weitere Antworten (1)
Daniel Shub
am 25 Jul. 2011
This seems to me to the documented (although maybe not expected) behavior.
Quesiton 1: The documentation of calling a package method within the package:
says that you must use the "package." notation.
Question 2: The documentation on "Packages and the MATLAB Path" is pretty clear:
that being in the package directory doesn't do much.
Question 3: The documentation is from r2011a, so yes, it is the same in the newer version.
3 Kommentare
Ron Lu
am 22 Mai 2013
That is lame. If I write my classes first, then separate them into different packages, I have to go back to add package name dot (or import *) anywhere the class is referred.
Daniel Shub
am 23 Mai 2013
@Ron, I would suggest you file an enhancement request if you would like to see a change.
Siehe auch
Kategorien
Mehr zu Whos finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!