靜態(tài)一直非常神秘的存在
父類代碼
class Parent {
public void method() {
System.out.println("parent method");
}
public static void staticMethod() {
System.out.println("parent static method");
}
}
子類代碼
class Child extends Parent {
@Override
public void method() {
System.out.println("child method");
}
//@Override error:Method does not override method from its superclass
public static void staticMethod() {
System.out.println("child static method");
}
}
測試輸出
public static void main(String[] arg) {
Parent parent = new Child();
parent.method();
parent.staticMethod();
}
結(jié)果

Paste_Image.png
從代碼中可以看到,在子類中靜態(tài)方法不能用@Override注解,用的話會(huì)報(bào)錯(cuò);從輸出結(jié)果可以看出,子類并沒有復(fù)寫父類的靜態(tài)方法,這是為什么呢?
因?yàn)榉椒恿?code>static關(guān)鍵字修飾后,靜態(tài)是隨著類的加載而加載的,優(yōu)先于對(duì)象存在,所以該方法就屬于類的,可以用類名直接調(diào)用,子類不能復(fù)寫。
總結(jié):父類的靜態(tài)方法可以被子類繼承,但是不能重寫。
小拓展:內(nèi)部類中如果有靜態(tài)字段或靜態(tài)方法,則這個(gè)內(nèi)部類也必須用靜態(tài)修飾,否則會(huì)報(bào)Inner classes cannot have static declarations錯(cuò)誤。