There are three opcodes to invoke Java methods. It is clear that invokeStatic is just for static method invocation.
As far as I know invokespecial is used when invoking constructor and private methods. So, do we need to differenticate private and public method invocation at run time? It could be invoked with same opcode say invokevirtual?
Does JVM deals with private and public method definition? As far as I know public and private keywords is just needed at development phase for encapsulation?
http://www.artima.com/underthehood/invocationP.html
The link above gives valuable examples clearly which addresing my question.
When you invoke main() in Subclass as defined above, it must print “Superclass’s interesting method.” If invokevirtual were used, it would print “Subclass’s interesting method.” Why? Because the virtual machine would choose the interestingMethod() to call based on the actual class of the object, which is Subclass. So it will use Subclass’s interestingMethod(). On the other hand, with invokespecial the virtual machine will select the method based on the type of the reference, so Superclass’s version of interestingMethod() will be invoked.