在Java中,靜態(tài)方法屬于類本身,而不是實(shí)例對(duì)象。因此,靜態(tài)方法的繼承和重寫(xiě)規(guī)則與實(shí)例方法不同。對(duì)于父類和子類中的靜態(tài)方法,不存在“重寫(xiě)(Override)”的概念,而是“隱藏(Hiding)”。
當(dāng)子類定義了一個(gè)與父類同名、同參數(shù)列表的靜態(tài)方法時(shí),子類的方法會(huì)隱藏父類的靜態(tài)方法。這種現(xiàn)象稱為靜態(tài)方法隱藏。
關(guān)鍵點(diǎn)如下:
class Parent { public static void method() { System.out.println("Parent static method"); } } class Child extends Parent { public static void method() { System.out.println("Child static method"); } } public class Test { public static void main(String[] args) { Parent p = new Child(); p.method(); // 輸出:Parent static method Child c = new Child(); c.method(); // 輸出:Child static method } }
盡管p
指向的是Child
實(shí)例,但因?yàn)?code>p的編譯時(shí)類型是Parent
,所以調(diào)用的是Parent
的靜態(tài)方法。
立即學(xué)習(xí)“Java免費(fèi)學(xué)習(xí)筆記(深入)”;
Java規(guī)定,實(shí)例方法可以被重寫(xiě),但靜態(tài)方法不能。如果子類有一個(gè)與父類靜態(tài)方法同名的方法,而父類方法是靜態(tài)的,子類方法是非靜態(tài)的,編譯器會(huì)報(bào)錯(cuò)。
class Parent { public static void method() { } } class Child extends Parent { public void method() { } // 編譯錯(cuò)誤!不能用實(shí)例方法隱藏靜態(tài)方法 }
若想調(diào)用被隱藏的父類靜態(tài)方法,應(yīng)直接通過(guò)父類名調(diào)用:
Parent.method()
—— 明確調(diào)用父類靜態(tài)方法。Child.method()
—— 調(diào)用子類自己的靜態(tài)方法。不建議通過(guò)對(duì)象調(diào)用靜態(tài)方法,盡管語(yǔ)法允許,但容易引起誤解。
基本上就這些。靜態(tài)方法的隱藏基于類型聲明,與多態(tài)無(wú)關(guān),理解這一點(diǎn)就能避免常見(jiàn)誤區(qū)。以上就是Java中父類和子類靜態(tài)方法隱藏規(guī)則的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)