Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why static method of parent class is called when subclass has already overridden it?

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.

like image 402
Kshitij Jain Avatar asked Sep 14 '13 17:09

Kshitij Jain


Video Answer


1 Answers

static method resolution is always based on the Reference type.
The code

superClassWithSuperCons.staticMethod();
superClassWithSubCons.staticMethod();
subClassWithSubCons.staticMethod();

is converted to this after compilation

SuperClass.staticMethod();
SuperClass.staticMethod();
SubClass.staticMethod();

Accroding to this it is the call to SuperClass method not the subclass method.So you are getting the output of SuperClass method.

like image 125
Prabhaker A Avatar answered Nov 03 '22 00:11

Prabhaker A