2012-05-28 49 views

回答

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 

       我覺得它只是簡單/清潔只是調用超級的在覆蓋的開頭代碼(除非有有些確實是的具體原因不是),只要確保我調用父母的銷燬/刪除/免費/銷燬我已經做了自己的清理工作(我們絕對不希望父母將對象從在我們下面!)

相關問題