Before you start reading I would like to clarify:
I have already thought of other designs and work arounds
I’m only interested in the problem I exposed and not “changing” it (so no solutions such as delete the points in A and create new points fields in B and C…
lets consider the following code:
public class A {
protected cpVect[][] points = null;
...
}
and its classes that inherits it:
public class B extends A{
...
}
public class C extends A{
...
}
so far so good.
my problem is that for B and C contains arrays of points that will be created in the constructor using something like
if(points == null){calculate points code}
the problem is as follow
points in A can’t be static because the dimensions are different in B and C.
but every instance of B will share the B points and every instance of C will share the C points. (in other words a Square will always be a square and a triangle will always be a triangle). and therefore I want to have the B:points and C:points static so that i don’t get duplicates of the values for every instance.
So is there a way to redefine points as static in B and C when it is not static in A?
If you access
pointssolely through property methods (getters/setters) you can do whatever you want in the subclasses. If you use inheritance,Awill have to be an abstract class. Otherwise you’d always carry around the empty points variable inA(losing 8 bytes, probably).In this case the hierarchy would look like this:
And the same for
C. IfAincludes no other state or functionality, you should make it aninterface.