why is modularity changing the rules of inheritance?
Alan Bateman
Alan.Bateman at oracle.com
Tue Mar 13 10:12:22 UTC 2018
On 13/03/2018 09:23, Bernard Amade wrote:
> now if in module B you just create a Service by inheriting from this class:
> - the className is correct (an instance of the class has been created for the service)
> - you can't invoke newInstance from that very class!(if the class is not opened or exported)
Constructor::newInstance has always been caller sensitive. If I read the
example correctly, you've got code in class A trying to create an
instance of class B. B is not accessible to A, it doesn't matter that B
extends A. The issue you are running into isn't new with modules -
you'll see the same IllegalAccessException with the class path for the
case that B is not public (and in a different package to A).
> - you can't get the Resource (or other files) unless they are explicilty opened.
> if you copy this code in the class implementing the service everything just works fine
> so there is a difference between the same code being explicitly in the class or inherited!
The Class.getResourceXXX methods are also caller sensitive so the
example is code in class A trying to locate a resource in its own
module. If you maintain both A and B then it would be simpler if B were
to call the method in the super class with a connection or URL to the
resource.
-Alan.
More information about the jigsaw-dev
mailing list