为什么子类已经重写了父类的静态方法?

2023-11-24

当静态方法在子类中被重写时,我对静态方法的行为感到困惑。

下面是代码:

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

为什么在第二种情况下会调用超类的静态方法?

如果方法不是静态的,那么根据多态性,当子类对象在运行时传递时,会调用子类的方法。


静态方法解析始终基于Reference type.
代码

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

编译后转换成这样

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

据此,这是调用SuperClass方法不是子类方法。所以你得到的输出SuperClass method.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么子类已经重写了父类的静态方法? 的相关文章

随机推荐