当静态方法在子类中被重写时,我对静态方法的行为感到困惑。
下面是代码:
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(使用前将#替换为@)