天天看点

Java中静态方法不具有多态性

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