我應該在自定義代碼之前還是在重寫某個方法之後調用super.xxxx()?
是否有一些識別技能?我應該在我的自定義代碼之前還是在我重寫某個方法之後調用super.xxxx()?
3
A
回答
6
短的ans更新:取決於。
長答案: 您需要了解父類中方法的實現。
- 有些情況下,超級方法做一些「初始化」工作所需的重寫方法運作順利。在這種情況下,
super.myMethod()
調用應該是該方法的第一行。 - 在其他一些情況下,父類中方法的實現可能負責一些清理操作(或某種終結操作)。那是當你需要撥打
super
最後線在你的重寫實現。 - 然後在某些情況下,順序並不重要,但是您必須調用super方法,因爲基類中的實現執行了一些必需的操作;儘管這些操作的順序並不重要。大部分生命週期方法都屬於這一類。這就是爲什麼你必須致電
super.onCreate()
儘管你可以在你的onCreate()
任何時候做到這一點。 - 最後,也有不需要調用super方法的情況。基類有一個默認實現,您可以選擇使用或忽略。你也可能在這裏做一個if-else:例如,你可能會打電話給超級實現。如果它返回
null
,則可以創建一個新對象並返回該對象。
是否有一些識別技能?
- 閱讀方法的文檔,看看是否有其中
super
方法必須調用該命令的任何提及。 - 通過基類的源代碼,看看你是否可以確定它是否做了任何必須以特定順序調用它的任何事情。
+0
+1 ............................. –
0
(Very OOPy)一般來說,這個想法就是當你需要父母的功能時調用super。我知道這似乎很明顯,但它的意義,當談到清理功能:
Init:
super.init
... your initialization code
Delete:
... your deletion code here <-- important
super.delete
SomeOtherRandomMethod:
... your code may go here if it does not need any state from the parent
super.SomeOtherRandomMethod
... otherwise it can go here
我覺得它只是簡單/清潔只是調用超級的在覆蓋的開頭代碼(除非有有些確實是的具體原因不是),只要確保我調用父母的銷燬/刪除/免費/銷燬後我已經做了自己的清理工作(我們絕對不希望父母將對象從在我們下面!)
相關問題
- 1. 我應該在自己的代碼之後還是在它之前調用[super superMethod]?
- 2. 我的CSS重置應該在我的CSS代碼之前或之後?
- 3. 我應該在Mongo之前還是之後存儲數據?
- 4. JavaDoc應該在方法級註釋之前還是之後?
- 5. Laravel:在返回響應之前我可以重寫laravel代碼?
- 6. 應該重寫代碼還是應該使用方法?
- 7. 在Java代碼約定中,實例變量應放置在方法之前還是放在方法之後?
- 8. 我該如何解決這個問題:在IE7之前還是之後?
- 9. 我應該在dlopen之前鎖定嗎?
- 10. 我應該在json.dumps(...)之後編碼嗎?
- 11. 我應該使用回調還是應該重寫屬性?
- 12. 在調用setContentView(View)函數之前,如何從代碼自定義我的layout.xml?
- 13. 我應該在我的代碼中使用thread.sleep還是timer?
- 14. 我應該在DialogFragment本身(回調方法之前)還是Activity(回調方法)中關閉DialogFragment?
- 15. 爲什麼我應該在addActionListener之前定義一個JLabel?
- 16. 在我調用之前在代碼中定義的函數後,Excel變得無法響應
- 17. 我應該在交易中還是之後運行VACUUM?
- 18. iOs 5,initWithDecoder在我的自定義init之前被調用
- 19. 應該使用自定義方法之前(:每個)部分
- 20. 我應該重寫service()還是doPost()?
- 21. 我應該影子還是重寫?
- 22. 我應該在我的代碼後面使用此函數還是BusinessLogic類
- 23. 我應該重寫Django(註釋)框架的模板還是在我自己的模板中進行自定義?
- 24. 如何在nanoc的網站編譯之前/之後調用我的代碼?
- 25. 在super.init初始化自我之前使用自我方法調用
- 26. 在調用File.Delete之前,我應該調用File.Exists嗎?
- 27. 在從程序代碼調用Execute之前,我應該檢查一個ICommand的CanExecute方法嗎?
- 28. 我應該重寫哪個AuthorizationFilterAttribute方法?
- 29. 我的自定義銷燬方法不會在銷燬回調之前和之後觸發默認值
- 30. 預處理數據:我應該在運行PCA之前還是之後調整數據?
這取決於你用什麼方法覆蓋。 – adatapost