可以从类定义中删除final来打破向后兼容性吗?

Cha*_*azz 6 java polymorphism inheritance final backwards-compatibility

我目前正在阅读Joshua Bloch撰写的Effective Java,第17项是"继承的设计和文档,或者禁止它".作者建议默认禁止继承.

默认情况下声明类final是否安全,如果需要扩展类,则在以后的发行版中删除final关键字?它是否会破坏与以前版本编译的代码的向后兼容性?

如果是这样的话,那么让所有类最终成为一个更安全的赌注,只有在有良好支持的需求的情况下才能在将来的版本中删除它.

gus*_*afc 10

它既不破坏二进制也不破坏源兼容性 这就是让课程最终成为一个好主意的原因之一; 改变主意总是可以的.

Java语言规范,§13.4.2,关于二进制兼容性有如下说明:

更改声明final为不再声明的类final不会破坏与预先存在的二进制文件的兼容性.

我想你仍然可以构成一个可以打破程序的解释性例子; 就像字节码一样 - 生成一个继承自所谓final类的类,然后加载生成的类并依赖于获取VerifyError.