如下面一段代码:
class Polymorphic{
     static void method(){
        System.out.println("Parent Class");
    }
}class PolymorphicAndStatic extends Polymorphic{
    static void method(){
        System.out.println("subclass");
    }
    public static void main(String [] args){
        Polymorphic poly = new PolymorphicAndStatic();
        poly.method();
    }
}
为什么只能调用到父类的方法,却不是调用到子类的方法。

解决方案 »

  1.   

    根据我的理解,多态的实现主要是由于系统在调用方法时,是在调用的时候生成方法引用的,而如果是静态的方法,类一声成就有了引用的值了,那就是不是在调研的时候动态生成的。
    例如:
    class Polymorphic{
         static void method(){
            System.out.println("Parent Class");
        }
    }
    如果是静态的,就已经有引用,而非静态的就还没有。    public static void main(String [] args){
            Polymorphic poly = new PolymorphicAndStatic();
            poly.method();
        }
    这时候,如果super的method是非静态的,此时就只生成了子类的方法引用,而没有父类的,所以结果就是子类的,才实现了多态。否则如果已经有了父类的(静态的有了引用),就不要子类的了。
      

  2.   

    static的东西跟多态没有关系。
      

  3.   

    static方法是“类”方法,方法调用信息是在编译的时候就已经决定了的。
    Polymorphic poly = new PolymorphicAndStatic();
    poly的类类型是Polymorphic,编译的时候就定义了的。
    poly.method();
    这一句在编译的时候就决定了用Polymorphic的method方法。