Java中的静态方法具有多态性吗?
程序员文章站
2022-05-28 18:06:51
...
java中的普通方法是具备多态性的,那么静态方法如何呢?
先看代码:
class SuperClass {
//父类的一个静态方法
public static String staticMethod (){
return "SuperClass's staticMethod()";
}
//父类的一个动态方法
public String dynamicMethod (){
return "SuperClass's dynamicMethod()";
}
}
//继承自SuperClass的Subclass
class Subclass extends SuperClass{
//子类貌似重写父类的静态方法
public static String staticMethod(){
return "derived class's staticMethod()";
}
//子类重写父类的动态方法
public String dynamicMethod(){
return "derived class's dynamicMethod()";
}
}
public class StaticMethodPolymorphism{
public static void main(String[] args) {
SuperClass sup = new Subclass();
System.out.println("----------------");
System.out.println("sup.staticMethod()-> "+ sup.staticMethod());
System.out.println("sup.dynamicMethod()-> "+ sup.dynamicMethod());
System.out.println("----------------");
}
}
输出结果为:
sup.staticMethod()-> SuperClass's staticMethod()
sup.dynamicMethod()-> derived class's dynamicMethod()
- 如果静态方法具备多态性的话,由于子类重写了父类的静态方法
- 此时sup.staticMethod()应该和sup.dynamicMethod()一样,都实现子类自己重写的方法。
- 事实上,
- 尽管SuperClass sup = new Subclass()这一写法使sup对象的引用看起来是指向Superclass的,但其实生成的仍是指向Subclass类的对象。
- 由于多态的缘故,当子类重写了父类的方法时,子类的对象应该会实现子类的方法。
- 可是从输出结果来看,
- sup.staticMethod()实现的却是SuperClass的静态方法。
- 可见java中的静态方法并不具备多态性。
其实这也是因为:
静态方法与类相关联,而不是与单一的类的对象相关联。
推荐阅读