class A{ public static void staticMethod(){ System.out.println("Static method of A"); } } class B extends A{ public static void staticMethod(){ System.out.println("Static method of B"); } } class TestStaticOverride{ public static void main(String args[]){ B b=new B(); A a=b; a.staticMethod(); } } The output is "Static Method of A" . So static methods are not overridden otherwise the output would have been "Static Method of B". How at runtime JVM decides to call the static method of class A and not B.