靜態方法屬於類,不屬於實例,因此不能被覆寫,只能被隱藏。
Parent p2 = new Child();
p2.staticMethod(); // 輸出 "parent's static method"
編譯期根據**引用型別** 綁定靜態方法,p2 宣告為 Parent,故調用 Parent.staticMethod()。這稱為「靜態綁定」。
class Fu { static void show() {} }
class Zi extends Fu { void show() {} } // 編譯錯誤
錯誤原因:子類實例方法 show() 試圖覆寫父類靜態方法 show(),語法不允許「實例覆寫靜態」或「靜態覆寫實例」。
| 特性 | 實例方法覆寫 | 靜態方法隱藏 |
|---|---|---|
| 綁定時機 | 執行期 (動態分派) | 編譯期 (靜態分派) |
| 多型 | 支援 | 不支援 |
| @Override | 可用 (建議) | **不可用** (會報錯) |
| 父類引用調用 | 調用子類實現 | 調用父類實現 |
final 禁止繼承。