核心Java API中的许多类都是最终类(包装类、字符串、数学)。为甚麽呢?
发布于 2012-05-02 02:34:18
出于安全原因,它们是最终版本。可能还有其他原因,但安全性是最重要的。
想象一下这样一种能力:继承java.lang.String,并将您自己的可变实现提供给安全敏感的API。API将别无选择,只能接受您的字符串(请记住替换原则),但您可以从它们下面更改字符串(在并发线程上或在API返回之后),即使在它们检查它有效之后也是如此。
原语的包装器也是如此:您不希望看到它们在任何情况下都是可变的,因为这将违反使用这些类在API中编码的有关其行为的重要假设。
通过不让其他人提供他们自己的、可能有敌意的、像String一样基础的类的实现,使String final解决了这个问题。
发布于 2012-05-02 02:33:48
您可能希望阻止其他程序员创建子类或重写某些方法。对于这些情况,您可以使用final关键字。
String类应该是不可变的-- string对象不能被它们的任何方法修改。因为java不强制这样做,所以类设计者这样做了。没有人可以创建String的子类。
希望这能回答你的问题。
https://stackoverflow.com/questions/10402315
复制相似问题