簡體   English   中英

覆蓋stringBuilder中的append方法?

[英]Overriding append method in stringBuilder?

我對StringBuilder類中的append方法有疑問。 我被問到,當stringBuilder類是最終的時,我們如何覆蓋StringBuilder類中的append()方法。 相同的邏輯適用於在String類為final時覆蓋String類中的toString()嗎? 請幫我。

謝謝

不,您無法真正覆蓋final方法,可能有些字節碼級別的魔術可以讓您做到這一點,但我不確定是否值得。

您可以創建一個包裝器類(類似於MyStringBuilder並為StringBuilder每個方法創建一個委托給StringBuilder實例的方法,然后可以根據需要修改append方法。 這種方法有一個問題,那就是您不能訪問StringBuilder定義的private變量,盡管這對於您的用例而言可能並不重要。 因人而異

聲明為final的類無法擴展,因此無法覆蓋它的任何方法。

可以擴展未聲明為final類,但不能重寫任何聲明為final方法。

覆蓋String類中的toString覆蓋了java.lang.Objectjava.lang.String的方法。 由於該類被聲明為final,因此您不能從該類派生,因此也不能覆蓋toString方法,這在String中是一種特殊情況,因為它返回String本身。

在最終類中重寫方法是不可能的。 而且append ()不是Object中的方法,因此它們不是等效的,但是您也不能覆蓋append。

這些課程是最終設計的。 API設計人員不想處理使這些類成為繼承基類的額外復雜性。

除了繼承以外,還可以使用委托並創建自己的StringBuilder類,該類將java.lang.StringBuilder的實例用作委托。 這使得創建自己的append方法變得很簡單。

暫無
暫無

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

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