日期:2014-05-20  浏览次数:20612 次

有关多态的问题
书上说:static 方法与final方法都不能进行后期绑定.也就不能发生多态.
那为什么下面的这个程序中的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) { //static方法
i.act();
}
public static void main(String[] a) {
Son son = new Son();
test(son);

}
} //输出结果为:Son.act(),如果static不能多态,那结果不就应该是Father.act()吗?


------解决方案--------------------
理解有问题
你 要考虑的是i.act();有没有多态,而不是调用的方法是不是static的
这跟test方法是否static无关,把两个act方法都修改成static看看
------解决方案--------------------
你这里要测试的是override的方法(act方法)本身是不是static的,而不是调用act方法的方法(test)是不是static的