I am confused by the behaviour of the static method when it is overridden in the subclass.
Below is the code :
public class SuperClass { public static void staticMethod() { System.out.println("SuperClass: inside staticMethod"); } } public class SubClass extends SuperClass { //overriding the static method public static void staticMethod() { System.out.println("SubClass: inside staticMethod"); } } public class CheckClass { public static void main(String[] args) { SuperClass superClassWithSuperCons = new SuperClass(); SuperClass superClassWithSubCons = new SubClass(); SubClass subClassWithSubCons = new SubClass(); superClassWithSuperCons.staticMethod(); superClassWithSubCons.staticMethod(); subClassWithSubCons.staticMethod(); } } Below is the output which we are getting : 1) SuperClass: inside staticMethod 2) SuperClass: inside staticMethod 3) SubClass: inside staticMethod Why static method of superclass gets called here in the second case ?
If method is not static, then according to polymorphism, method of the subclass is called when subclass object is passed on runtime.