title: Does Java support dynamic method invocation?
body: <pre><code>class A           { void F() { System.out.println("a"); }}
  class B extends A { void F() { System.out.println("b"); }}
  
  public class X {
      public static void main(String[] args) {
          A objA = new B();
          objA.F();
      }
  }
  </code></pre>
  
  <p>Here, <code>F()</code> is being invoked dynamically, isn't it?</p>
  
  <p><a href="http://www.baptiste-wicht.com/2010/04/java-7-more-dynamics/" rel="nofollow noreferrer"><strong>This article</strong></a> says:</p>
  
  <blockquote>
    <p>... the Java bytecode doesn’t support
    dynamic method invocation. There are
    three supported invocations modes :
    invokestatic, invokespecial,
    invokeinterface or invokevirtual.
    These modes allows to call methods
    with known signature. We talk of
    strongly typed language. This allows
    to to make some checks directly at
    compile time.</p>
    
    <p>On the other side, the dynamic
    languages use dynamic types. So we can
    call a method unknown at the compile
    time, but that’s completely impossible
    with the Java bytecode.</p>
  </blockquote>
  
  <p><strong><em>What am I missing?</em></strong></p>