在 Java 中禁止继承的充分理由是什么,例如通过使用最终类或使用单个私有无参数构造函数的类?使方法成为最终方法的充分理由是什么?
原文由 cretzel 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Java 中禁止继承的充分理由是什么,例如通过使用最终类或使用单个私有无参数构造函数的类?使方法成为最终方法的充分理由是什么?
原文由 cretzel 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可能希望使一个方法成为最终方法,这样覆盖类就不能改变其他方法所依赖的行为。在构造函数中调用的方法通常被声明为 final,因此您在创建对象时不会遇到任何不愉快的意外。
原文由 Bill the Lizard 发布,翻译遵循 CC BY-SA 2.5 许可协议
4 回答1.5k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
3 回答1.8k 阅读
2 回答769 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.3k 阅读
这里最好的参考是 Joshua Bloch 的优秀著作“Effective Java”的第 19 项,名为“为继承设计和文档,否则禁止它”。 (它是第二版中的第 17 项和第一版中的第 15 项。)你真的应该阅读它,但我会总结一下。
如果祖先类不是设计为从其继承的,则继承类与其父类的交互可能会令人惊讶且无法预测。
因此,类应该分为两种:
设计为**扩展**的类,并有足够的文档来描述应该如何完成
标记为 **final \*\* 的课程
如果您正在编写纯粹的内部代码,这可能有点矫枉过正。然而,将五个字符添加到一个类文件中所付出的额外努力是非常小的。如果您只是为了内部使用而编写,那么未来的编码人员总是可以删除“最终” - 您可以将其视为警告,说“此类在设计时并未考虑继承”。