是這樣的,昨日做題的時候,看到個問題。
如圖。
我個人是偏向static選項的
但是我還是去用代碼去驗證了下。
如圖所示:用override檢測不通過,代表沒有成功重寫。
后來,我把override注釋掉,用實際運行來看。
起初用的是子類物件去呼叫子類方法,結果是父類重寫方法。
然后我又用父類物件,去呼叫子類方法,結果確實父類沒有被重寫而是被繼承下來的方法。有人說這本質上沒有被重寫。
各位大佬,有誰能解釋下不,這是什么情況





uj5u.com熱心網友回復:
概念不清楚。繼承、覆寫、重寫 這些是面向物件里,針對“物件”而言的概念。
靜態方法,確切的說,不屬于面向物件的內容,不存在繼承、覆寫之類的說法。
如果父類和子類,都寫了同名的靜態方法,
那么呼叫時,建議使用“類名.方法名”來區分要呼叫哪個方法,用實體呼叫是不符合編碼規范的。
你的IDEA,在zi.m()這一行,也會顯示警告:
Access static 'Zi.m()' via class 'Zi' reference
意思就是說,你應該通過 Zi類參考的方式來呼叫,不應該用實體來呼叫。
uj5u.com熱心網友回復:
如果如果,你一定要違反編碼規范,一定要用實體來呼叫靜態方法,那么你定義的實體,如果是父型別別,那么執行父類的靜態方法,如果是子型別別,那么執行子類的靜態方法,比如:
Fu fu = new Fu();
fu.m();// 執行Fu類的靜態方法
fu = new Zi();
fu.m();// 執行Fu類的靜態方法
Zi zi = ((Zi)fu);
zi.m(); // 執行Zi類的靜態方法
uj5u.com熱心網友回復:
靜態方法是類級別的,不被物件左右。如果用物件來呼叫靜態方法,那物件.getClass()是什么類,就是呼叫什么類的靜態方法。如果子類沒有重寫過靜態方法,也就是物件.getClass()的類找不到靜態方法,就會繼續查找它的父類,直到找到靜態方法為止。所以子類重寫static方法,用物件來呼叫就會是子類的static方法。
uj5u.com熱心網友回復:
靜態方法不能被覆寫,只能用同名靜態方法來隱藏父類方法。這個是基礎知識。
uj5u.com熱心網友回復:
樓主呀,做為一個CSDNer,貼代碼水平有待提高啊!你有拍照的功夫,還不如直接復制并格式化粘貼到論壇。。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/133665.html
標籤:Java SE
下一篇:Java
