要强调的是,多态性只发生于方法,而不发生于域.并且,对于方法,只有那些非static与非final方法才具有多态性.
这里讨论的是static方法不能发生多态.值得注意的是,所谓的static方法不能多态指的是:override的方法本身是不是static的,而不是指调用override方法的方法是不是static的!
比如以下程序:

class Father ...{ 
public void act() ...{
System.out.println("Father.act()");
}
} 

class Son extends Father ...{ 
public void act() ...{
System.out.println("Son.act()");
}
} 
public class Test ...{ 
public static void test(Father i) ...{
i.act();
} 
public static void main(String[] a)...{
Son son = new Son();
test(son);
}
} 输出结果为:Son.act(),如果static不能多态,那结果不就应该是Father.act()吗?
其实,就象上面说的.我们要考虑的是的act()方法是不是static,有没有多态,而不是调用的方法test()是不是static的.
这跟test方法是否static无关,若把两个act方法都修改成static,则输出结果就是Father.act(),因为static方法不能多态.
本文探讨了Java中多态性的概念,特别是针对方法而非属性,并指出非static和非final方法才具有多态性。通过实例说明了static方法为何不能实现多态,以及如何正确理解方法调用过程中的多态行为。
389

被折叠的 条评论
为什么被折叠?



