3

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

4

2 回答 2

6

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

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

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

通过不让String其他人提供他们自己的、潜在敌对的、像String.

于 2012-05-01T18:34:18.110 回答
1

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

String 类是不可变的——字符串对象不能被它们的任何方法修改。由于 java 不强制执行此操作,因此类设计器执行了此操作。没有人可以创建 String 的子类。

希望这能回答你的问题。

于 2012-05-01T18:33:47.950 回答