我有一個關於StringBuilder類中的append方法的問題。我被問及如何重寫StringBuilder類中的append()方法,而stringBuilder類是final。是相同的邏輯適用於重寫String類中的toString(),而String類是final?請幫幫我。在stringBuilder中重寫append方法?
感謝
我有一個關於StringBuilder類中的append方法的問題。我被問及如何重寫StringBuilder類中的append()方法,而stringBuilder類是final。是相同的邏輯適用於重寫String類中的toString(),而String類是final?請幫幫我。在stringBuilder中重寫append方法?
感謝
覆蓋String類中的toString覆蓋java.lang.String
中java.lang.Object
的方法。由於該類聲明爲final,所以不能從它派生出來,因此不會覆蓋toString-method,這是String中的特例,因爲它返回String本身。
重寫最終類中的方法是不可能的。而append()
不是Object中的一個方法,所以它們不是等價的,但是你也不能重寫append。
不,你真的不能重寫final
方法,可能有一些字節級魔法,將允許你這樣做,但我不知道這是值得的。
您可以創建一個包裝類,像MyStringBuilder
併爲StringBuilder
的方法,每一個創建代表們的StringBuilder
一個實例,那麼你就可以在您認爲合適修改append
方法的方法。這種方法有一個問題,那就是你不能訪問StringBuilder
中定義的變量private
,雖然這對你的用例可能不是什麼大不了的。 YMMV
+1不值得。如果你要編寫自己的'javac'實現,你可以做任何你想做的事情,包括忽略final關鍵字或誰知道還有什麼。但這並不是一個好主意! – corsiKa 2011-04-01 23:21:45
這些類是最終的設計。 API設計者不想處理將這些類作爲繼承基類的複雜性。
除了繼承,您可以使用委託並創建自己的StringBuilder類,該類使用java.lang.StringBuilder的實例作爲委託。這使得創建你自己的追加方法變得微不足道。
聲明爲final
的類無法擴展,因此無法覆蓋它的任何方法。
未聲明final
的類可以擴展,但是任何聲明爲final
的方法都不能被覆蓋。
我相信你的意思是'延長最後一堂課,而不是壓倒一切。重寫最終的方法是不可能的。 – corsiKa 2011-04-01 23:20:22
你說得對。我會糾正我的表述。 – 2011-04-01 23:26:24
事實上,在'String'中''toString()'方法實現爲'return this;'。 – 2011-04-01 23:39:34