java中父類有static修飾的方法其子類能繼承嗎?若子類也有該方法,是覆蓋還是重寫?

時間 2021-06-12 10:10:13

1樓:山月風成

靜態方法只與類有關,不與例項有關,重寫只適用於例項方法,不適用於靜態方法。

非靜態方法,按重寫規則,呼叫相應的類的實現方法,而靜態方法只與類有關。

因為靜態方法是程式一執行就已經分配好了記憶體位址,而且該位址是固定的,所有引用到該方法的物件(父類或者子類)所指向的始終是同乙個記憶體位址中的資料,即該靜態方法。如果子類定義了相同名稱的靜態方法,只會新增乙個記憶體位址,並不會重寫。

2樓:黃恩雄

1、子類繼承父類的時候,會在子類的建構函式中呼叫父類的建構函式,這是乙個很關鍵的地方,這意味著子類是通過父類的建構函式來繼承獲取父類的成員(變數和方法)。而Static關鍵字修飾的內容是屬於類的,優先於類物件的建立而建立。也就是子類如果建立了乙個和父類一樣的靜態成員,父類再通過子類物件將父類的該靜態成員遺傳給子類,應該是會覆蓋子類的靜態成員。

這樣的話子類的子類也會被子類的靜態成員所覆蓋,應該會導致所有子類都使用同乙個父類靜態成員(靜態成員傳導)。

2、根據多型原理,父類變數接收子類物件時如果父類的靜態成員被子類覆蓋應該呼叫子類的靜態成員(多型)。

1和2形成衝突。實際測試中,通過乙個demo——Father,Son,GrandSon中均定義各自的相同靜態方法,改寫方法體中的內容,然後使用多型對各個方法進行呼叫,再使用本身的類物件進行呼叫,其結果是:如果子類重寫了父類的靜態方法,使用多型由父類變數接收子類物件時,該父類變數呼叫的是父類自己的靜態方法(沒有多型);如果子類重寫了父類的靜態方法,使用子類本身型別的變數接收子類的物件,子類呼叫自己的靜態方法(沒有傳導);如果子類沒有重寫父類的靜態方法,使用子類本身型別的變數接收子類的物件會呼叫父類的靜態方法(繼承)。

所以,我認為靜態成員的繼承應該是執行變數型別就近原則:如果父類和子類都有相同的靜態成員方法時,父類變數就執行父類靜態成員;子類變數就執行子類靜態成員。如果子類沒有相應的靜態成員方法,子類變數就執行父類的靜態成員。

子女也總是混不下去了才會啃老吧。。。

3樓:

首先要知道,當類中的方法宣告為static時,這個方法就和此類建立的物件脫離了關係。

當子類繼承父類後,子類可以呼叫父類的靜態方法,當父類靜態方法被子類覆蓋後將會呼叫覆蓋後的方法。

但這和類生成的物件已無關係,假如宣告乙個父類引用,建立了乙個子類物件。呼叫子類物件覆蓋父類後的靜態方法,依然會執行父類的靜態方法。完

Java中如何理解父類的引用指向類的物件。。初學者。。?

圓胖腫 很簡單,兩個人,a和b,a是領導,a說我要這個這個這個功能,將其寫入介面,交給b去實現,用的時候,a不需要知道b是怎麼實現的,直接用a定義的介面就好了,這樣開發的時候實現和呼叫就可以分離,用模擬測試等軟體就更方便了 EmiyaGm 你是說父類引用指向子類物件吧,你可以先去看一下向上轉型,才好...

java中static是不安全的對嗎?那麼static是不是必要和final結合使用?有沒有相關規範?

舉個容易理解的例子 我會吃牛肉,牛肉可能會有致病病毒,病毒會導致我生病,所以,吃牛肉和我會生病有關。吃牛肉我一定會生病嗎?我生病一定是因為吃牛肉嗎?SmfUtil類中有乙個變數smf被static修飾,被static修飾的smf可能會被多執行緒同時訪問,被多執行緒訪問所以smf會發生執行緒安全問題 ...

為什麼物件導向中的父類叫父類,而不叫母類?

一無所知 1 如果叫母類那你又要問 為什麼物件導向中的母叫母類,而不叫父類.2 parent class翻譯成父類,和負累同音,知道什麼意思了吧 liujunsong 中文語境由於兩千年的積累,有很多成語,對語言使用起到了潛移默化的影響。在中文裡面,父子是預設的對仗,因此有了子類,對應的就有父類。上...