先上代码,看结果分析:
父类:
class Base {
public static int a = 10;
public int b = 20;
static {
System.out.println("Static Init Base " + a);
// System.out.println("Null Init " + b);
}
public Base() {
System.out.println("Init Base " + this.b);
}
public static void testStatic() {
System.out.println("test static is or override.");
}
public void test(){
System.out.println("test test-----------");
}
}
子类:
public class SuperClass extends Base {
// 静态变量、静态块执行顺序,按书写先后顺序
public static int a1 = getSuperStaticNumber();
public static int a = 11; //测试静态属性是否能够被覆盖
public int b1 = getSuperInstanceNumber();
public SuperClass() {
System.out.println("Init SuperClass" + this.b1);
}
static {
System.out.println("Static Init SuperClass" + a1);
}
public static int getSuperStaticNumber() {
System.out.println("Static member init");
return 100;
}
public int getSuperInstanceNumber() {
System.out.println("Instance member init");
return 200;
}
public static void testBaseStatic(Base test){
System.out.println("test static property is mult "+test.a );
}
public static void main(String[] args) {
System.out.println("test a is or not override "+a);
testBaseStatic(new SuperClass());
}
}
在eclipse中想覆盖Base中静态方法testStatic,使用快捷键alt+shift+s ,选择overrid method 截图如下:
上图显示所有可以覆盖的方法,不包括静态方法testStatic 。
结论:Java中静态方法不能够被覆盖。
其调用按多态用法:只有非静态方法有多态;而静态方法、静态属性、非静态属性都没有多态。
验证静态属性不具有多态性代码:
public static void main(String[] args) {
System.out.println("test a is or not override "+a);
testBaseStatic(new SuperClass());
}
结果:
test static property is mult 10