// 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() */