Nuno Cruces wrote:

The interpreter calls "native" methods using reflection, which works
in all but one situation: non-virtual calls on the super instance.
Static methods, interface methods, virtual methods all work.
Constructors and private methods, also work (private methods thanks to
setAccessible), and are non-virtual. It doesn't seem possible,
however, to make the non-virtual call to a public/protected method,
required to implement invokespecial on the super instance.

Not a direct answer, but there is one place in the JDK where this is done. Deserialisation requires calling the no-arg constructor of the most derived, non-Serializable class. Obviously you can't do this with the public reflection API or verifiable bytecode. So that would be a good place to start looking.

Tom Hawtin
(thomas.hawtin at sun.com)

Reply via email to