Static方法和多态

今天在CSDN上看到【bao110908】发的帖子中有这样一道题目:

贴子链接:http://topic.csdn.net/u/20070828/10/7aa61fbc-8575-4212-85c4-582c08f81535.html

请问以下程序会输出什么:

public class ParentChild {

   public static void main(String[] args) {

      Parent parent = new Parent();

      Parent child = new Child();

      System.out.println(parent.getName());

      System.out.println(child.getName());

   }

}

class Parent {

   public static  String getName() {

      return "parent";

   }

}



class Child extends Parent {

   public static String getName() {

      return "child";

   }

}

答案是:

parent

parent 

初步一看child应该是利用多态的特性调用Child类的getName()。但是注意,这里的方法是static的,多态是不支持静态方法的。 

我们再来看一下这个类的class文件的反编译的结果,就更清楚了。下面是反编译后的代码:

public class ParentChild {

   public static void main(String[] args) {

      Parent parent = new Parent();

      Parent child = new Child();

      System.out.println(Parent.getName());

      System.out.println(Parent.getName());

   }

}

  

你可能感兴趣的:(static)