在java中,static成員函數(shù)是否可以被重寫呢?
結(jié)論是,你可以在子類中重寫一個static函數(shù),但是這個函數(shù)并不能像正常的非static函數(shù)那樣運(yùn)行。
也就是說,雖然你可以定義一個重寫函數(shù),但是該函數(shù)沒有多態(tài)特性。讓我們測試一下:
1 class testClass1{ 2 static void SMothod(){ 3 System.out.從結(jié)果中可以看到,當(dāng)我們用父類的實例引用(實際上該實例是一個子類)調(diào)用static函數(shù)時,調(diào)用的是父類的static函數(shù)。
原因在于方法被加載的順序。
當(dāng)一個方法被調(diào)用時,JVM首先檢查其是不是類方法。如果是,則直接從調(diào)用該方法引用變量所屬類中找到該方法并執(zhí)行,而不再確定它是否被重寫(覆蓋)。如果不是,才會去進(jìn)行其它操作(例如動態(tài)方法查詢),具體請參考:方法的加載
新聞熱點
疑難解答