class Insect {
int i = 9;
int j;
Insect() {
   
 prt("i = " + i + ", j = " + j);
 j = 39;
}
static int x1 = 
 prt("static Insect.x1 initialized");/////////////////////static int prt(String s) {
 System.out.println(s);
 return 47;
  }
}public class Beetle extends Insect {
int k = prt("Beetle.k initialized");
Beetle() {
 prt("k = " + k);
 prt("j = " + j);
}
static int x2 =
 prt("static Beetle.x2 initialized");
static int prt(String s) {
 System.out.println(s);
 return 63;
}
public static void main(String[] args) {
 prt("Beetle constructor");
 Beetle b = new Beetle();
}
}
/* 运行结果:
static Insect.x1 initialized
static Beetle.x2 initialized//static Beetle.x2 initialized
Beetle constructor//Beetle constructor
i = 9, j = 0
Beetle.k initialized//Beetle.k initialized
k = 63//k = 63
j = 39//j = 39*/
//多态中说,子类覆盖了父类的方法,调用的将是子类的方法,为何static int x1=prt("static Insect.x1 initialized"); 调用的是父类的方法。

解决方案 »

  1.   

    静态方法不能被override. 而且调用只和引用类形有关, 也就是说你用哪个类的引用(无论heap上存的真实类型是什么),你就是在调用哪个类的static方法,所以多态对静态方法是不适用的。
      

  2.   

    不能被重写
    static是属于类的方法,调用时直接用类名调用
      

  3.   

    静态因为不存在运行期动态对象访问问题,也就是多态问题,所以也就不存在override问题了。
      

  4.   

    static方法不能被覆盖,是只与类有关的方法,比如B类型继承于A类型,实际上B和A的关系是IS A的关系,所以B类调用的结果和A类相同