title: How does dynamic method dispatching work in Java
body: <p>Can a superclass variable access an overridden method of a subclass.
  For ex:</p>
  
  <pre><code>class A {
      void callMe() {
          System.out.println("Inside A");
      }
  }
  
  class B extends A {
      void callMe() {
          System.out.println("Inside B");
      }
  }
  
  class Dispatch {
      public static void main(String args[]) {
          A a = new A();
          B b = new B(); // Object of type B
          A r; // Obtain a reference of type A
  
          r = a; // Refers to A object
          r.callMe(); // Calls A's version of callMe()
  
          r = b; // Refers to B object
          r.callMe(); // calls B's version of callMe() and my question is on this
      }
  }
  </code></pre>
  
  <p>I learned earlier that a superclass variable that is referencing a subclass object can access only those parts of an object that are defined by the superclass. Then how can the second <code>r.callMe()</code> call <code>B</code>'s version of <code>callMe()</code>? It should only call <code>A</code>'s version of <code>callMe()</code> again.</p>