On 21.09.2016 13:53, David M. Lloyd wrote:
It turns out that you don't actually need setAccessible to access a
superclass protected method from a subclass.
I can even override a non-final protected method and make it public, yes.
If you have an instance of a subclass of the type containing the
protected method, any class in the _same package_ as the _subclass_ can
call invoke() on a Method without first making it accessible, as long as
you pass in that subclass instance (even if the method is static, which
is a little weird but necessary to make the check work!).
This will not work if the instance is not created by me
As to whether this makes sense in 100% of cases... that's a different
discussion (and a fairly complex one at that - the code for checking
protected access is (AFAICT) the most complex part of access checking in
the JDK and the JVM).
and has many rules I did learn of quite late, yes.