// StaticDDD.java -- double dynamic dispatch resolved using "static" methods

class Base {
   void method1 () {
      System.out.println ("Base.method1()");
      method2();
      Base.method2();
      Derived.method2();
   }
   static void method2 () { System.out.println ("Base.method2()"); }
}

class Derived extends Base {
   void method1 () {
      System.out.println ("Derived.method1()");
      super.method1();
   }
   static void method2 () { System.out.println ("Dervied.method2()"); }
}

public class StaticDDD {
   public static void main (String[] args) {
      new Derived().method1();
      new Base().method1();
   }
}

/*
  Derived.method1()
  Base.method1()
  Base.method2()
  Base.method2()
  Dervied.method2()
  Base.method1()
  Base.method2()
  Base.method2()
  Dervied.method2()
 */