今天在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()); } }