为什么Wrapper Classes,String,... final?

时间:2012-05-01 18:28:23

标签: java oop

Core Java API中的许多类都是final(包装类,字符串,数学)。 为什么会这样?

2 个答案:

答案 0 :(得分:6)

出于安全原因,它们是最终的。可能还有其他原因,但安全性是最重要的。

想象一下,能够继承java.lang.String,并为安全敏感的API提供您自己的可变实现。 API没有选择,只能接受你的字符串(记住替换原则),但你可以从它们下面(在并发线程上或在API返回后)更改字符串,即使它们已经检查了它有效的。

原语的包装器也是如此:你不希望在任何情况下都看到它们是可变的,因为它会违反关于使用这些类在API中编码的行为的重要假设。

String最终解决这个问题的方法是不要让其他人提供他们自己的,可能是敌对的类实现,这些实现与String一样基本。

答案 1 :(得分:1)

您可能希望阻止其他程序员创建子类或覆盖某些方法。对于这些情况,您使用 final 关键字。

String类意味着不可变 - 字符串对象无法通过任何方法进行修改。由于java没有强制执行此操作,因此类设计人员也这样做了。没有人可以创建String的子类。

希望这能回答你的问题。