簡體   English   中英

繼承java中的final方法有什么用? 如果我們不能覆蓋它

[英]what is the use of inheriting a final method in java ? If we cant override it

我正在研究 java 基礎知識並遇到了這個最終關鍵字。 並閱讀可以繼承最終方法。 但是我們不能覆蓋那個方法。 那么繼承任何 final 方法有什么用呢? 為什么要這樣做?

Inheritance

方法的 Inheritance 使該方法可用於在子類中調用。 調用方法顯然很有用。

當在子類上調用方法名時,Java 運行時首先查看子類是否有這樣的方法。 如果找到,則執行該方法的實現。 如果未找到,則 Java 運行時會在超類中查找此類方法。 如果找到,則執行該方法的實現。 如果未找到,則 Java 運行時會查找超類的超類,依此類推。

覆蓋

覆蓋意味着您不想調用超類中的方法,而是子類提供了在調用該方法名稱時使用的替代(或附加)行為。 在某些課程中,允許替代/附加行為可能是有風險的。

事實上,一般意見似乎正在向 position 發展,即所有方法都應該是最終的,直到 class 作者確定允許特定覆蓋是必要或有用的情況以證明潛在風險是合理的。 (類似的智慧似乎正在增長,在 position 中,類應該最初設計為不可變的,直到確定了對可變性的特定需求。)

密封類

密封類/接口的未來特性為這個問題帶來了另一個變化。 密封的 class 僅通過編譯時已知的子類的顯式列表允許 inheritance。

在密封的 class 中,僅通過其已知子類可以為 inheritance(非final )提供一種方法。 編譯器和 Java 運行時環境尊重允許的子類列表,消除了其他類稍后添加意外行為的風險。

現在可以在 Java 16 中嘗試將密封類作為預覽功能 該功能將於 2021 年 9 月在 Java 17中發布。

暫無
暫無

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

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