簡體   English   中英

Java-“ super”,“ this”或都不是-好的做法

[英]Java - “super” , “this” or neither - good practice

據我了解, this可以在類中被用來調用一個方法在任何其超類的可以作為編譯器會尋找在其超的方法,如果它不具備的(子)類 基本上就像使用super

所以我想知道,哪種做事更好? 是否有唱歌的一般經驗法則?

問題

當所討論的方法未編碼(即只能通過從其子類的繼承繼承而獲得)時 ,它們基本上會做同樣的事情嗎? 這種情況下,是否有理由選擇一個?

super.methodAvailableInSuper();

要么

this.methodAvailableInSuper();

更多澄清

為什么使用this. 完全沒有?

在這種情況下,似乎有兩類人:討厭使用this人和喜歡它的人。 我顯然不是專家,這些只是THEY(建議使用它的人)使用的參數:

當您用this.完成消息時this. 您肯定知道您打算將其發送this. 不使用this. 可能意味着您可能忘了寫您想要發送消息的內容。 它與變量一起使用以消除實例變量中的局部變量

** thissuper **

如果您不喜歡使用this ,那么“都不是”是您顯而易見的答案,因為編譯器不會要求您這樣做。

如果您認為在問題的上下文中使用this作為約定有一點意義,那么每種方法都有其好處:

super確保子類中的覆蓋不會影響消息發送,但是如果您希望代碼反映通過覆蓋進行的任何更改,則需要this

我希望程序員在經過這種思考過程之后已經做出了默認/更好的選擇,這就是我所要的。

它們不相等,因此您的問題沒有意義。

  • this.method()將調用對method()的最派生重寫,包括在任何派生類中該對象可能是該對象的實例。
  • super.method()將調用基類的method()的實現,或者如果它不提供實現本身,則調用它繼承的任何實現。

您應該使用完全可以滿足您需求的任何一種。 這不僅僅是審美選擇,還是“良好實踐”的問題。

編輯重新編輯后的內容:

當所討論的方法在基類中不可用時,它們基本上會做同樣的事情,對嗎?

錯誤。 super總是在基類或其父級中調用一個方法。 this稱為最派生的替代。 如果您絕對不想在任何將來的派生類中調用任何將來的實現,則可以編寫super如果要在調用時存在這樣的實現,則可以編寫this或不編寫任何內容。 編碼時您不知道這是什么。

這不是“最佳實踐”的問題,因為這些關鍵字非常不同。

當您調用super.methodAvailableInSuper(); 然后在運行時在所有父類中搜索此方法。 如果此方法存在於當前類或任何子類中,則不會執行此方法。

如果要調用重寫方法的超級實現而又不導致無限循環,可以使用此方法。

關鍵字this調用當前對象上的方法。 因此,將執行方法的正常執行。

也可以看看:

http://docs.oracle.com/javase/tutorial/java/IandI/super.html

為什么使用this. 完全沒有?

在這種情況下,似乎有兩類人:討厭使用this人和喜歡它的人。 我顯然不是專家,這些只是THEY(建議使用它的人)使用的參數:

當您用this.完成消息時this. 您肯定知道您打算將其發送this. 不使用this. 可能意味着您可能忘了寫您想要發送消息的內容。 它與變量一起使用以消除實例變量中的局部變量

** thissuper **

如果您不喜歡使用this ,那么“都不是”是您顯而易見的答案,因為編譯器不會要求您這樣做。

如果您認為在問題的上下文中使用this作為約定有一點意義,那么每種方法都有其好處:

super確保子類中的覆蓋不會影響消息發送,但是如果您希望代碼反映通過覆蓋進行的任何更改,則需要this

我希望程序員在經過這種思考過程之后已經做出了默認/更好的選擇,這就是我所要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM