title: Why invokeSpecial is needed when invokeVirtual exists
body: <p>There are three opcodes to invoke Java methods. It is clear that invokeStatic is just for static method invocation.</p>
  
  <p>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?</p>
  
  <p>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?</p>