一尘不染

在Java中禁止继承的理由?

java

有什么理由禁止Java中的继承,例如通过使用最终类或使用单个私有无参数构造函数的类?将方法定型的充分理由是什么?


阅读 330

收藏
2020-03-21

共1个答案

一尘不染

这里最好的参考是Joshua Bloch的出色著作“ Effective Java”的第19项,称为“继承的设计和文档,否则将禁止继承”。(在第二版中是第17项,在第一版中是第15项。)你应该阅读它,但我将进行总结。

如果祖先不是为了继承而来的,则继承的类与父母之间的交互可能是令人惊讶且不可预测的。

因此,类应分为两种:

  1. 设计为可扩展的类,并提供足够的文档来描述应如何完成

  2. 标记为最终课程

如果你纯粹是在编写内部代码,则可能有点过大。但是,在类文件中添加五个字符所涉及的额外工作量很小。如果你仅出于内部消耗而编写,那么将来的编码人员可以随时删除“最终”,你可以将其视为警告,指出“该类在设计时并未考虑继承性”。

2020-03-21