class a1 {
public static void f() {
system.out.println("a1.f()");
}
}
class a2 extends a1 {
system.out.println("a2.f()");
class t {
public static void main(string[] args) {
a1 a1 = new a1();
a1 a2 = new a2();
// 静态方法不具有多态效果,它是根据引用声明类型来调用
a1.f();// a1.f()
a2.f();// a1.f()
对静态方法的调用不存在任何动态的分派机制。当一个程序调用了一个静态方法,要被调用的方法都是在编译时就被选定的,即调用哪个方法是根据该引用被声明的类型决定的。上面程序中a1与a2引用的类型都是a1类型,所以调用的是a1中的f()方法。
原帖地址:http://jiangzhengjun.iteye.com/blog/652748