覆盖stringBuilder中的append方法?

时间:2011-04-01 22:58:40

标签: java

我对StringBuilder类中的append方法有疑问。我被问到如何在StringBuilder类中最后覆盖StringBuilder类中的append()方法。当String类是final时,同样的逻辑适用于在String类中重写toString()吗?请帮帮我。

由于

4 个答案:

答案 0 :(得分:4)

不,你不能真正覆盖final方法,可能会有一些字节码级魔法允许你这样做,但我不确定它是否值得。

您可以创建一个包装类,类似于MyStringBuilder,并为StringBuilder中的每个方法创建一个委托给StringBuilder实例的方法,然后您可以修改您认为合适的append方法。这种方法有一个问题,那就是你无法访问private中定义的StringBuilder变量,尽管这对你的用例来说可能不是什么大问题。 YMMV

答案 1 :(得分:1)

声明final的类无法扩展,因此无法覆盖它的任何方法。

可以扩展未声明为final的类,但不能覆盖任何声明为final的方法。

答案 2 :(得分:0)

覆盖String类中的toString会覆盖java.lang.Objectjava.lang.String的方法。由于该类被声明为final,因此无法从中派生,因此不会覆盖toString-method,这是String中的一个特例,因为它返回String本身。

在最终课程中覆盖方法是不可能的。并且append ()不是Object中的方法,因此它们不等效,但您也不能覆盖append。

答案 3 :(得分:-1)

这些课程是最终的设计。 API设计者不想处理使这些类成为继承的基类的额外复杂性。

您可以使用委托创建自己的StringBuilder类,而不是继承,该类使用java.lang.StringBuilder的实例作为委托。这使得创建自己的追加方法变得微不足道。