Java中的静态方法具有多态性吗?

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中的静态方法并不具备多态性。

其实这也是因为:

静态方法与类相关联,而不是与单一的类的对象相关联。

猜你喜欢

转载自blog.csdn.net/qq_23889793/article/details/74949153
今日推荐