禁止在Java中继承的充分理由?
2022-08-31 06:23:21
在Java中禁止继承的充分理由是什么,例如使用最终类或使用单个私有无参数构造函数的类?使方法最终确定的充分理由是什么?
在Java中禁止继承的充分理由是什么,例如使用最终类或使用单个私有无参数构造函数的类?使方法最终确定的充分理由是什么?
您在这里最好的参考是Joshua Bloch的优秀著作“Effective Java”的第19项,名为“设计和文档继承,否则禁止继承”。(这是第二版中的第17项和第一版中的第15项。你真的应该读一读,但我会总结一下。
如果祖先不是为继承而设计的,那么继承类与其父母的相互作用可能是令人惊讶和不可预测的。
因此,类应该有两种类型:
设计为“扩展”的类,并有足够的文档来描述应该如何完成
标记为**最终的课程**
如果你正在编写纯粹的内部代码,这可能有点过分。但是,向类文件添加五个字符所涉及的额外工作非常小。如果你只是为了内部消费而编写的,那么未来的程序员总是可以删除“final”——你可以把它想象成一个警告,说“这个类在设计时没有考虑到继承”。
您可能希望使方法成为最终方法,以便重写类无法更改其他方法中依赖的行为。构造函数中调用的方法通常被声明为 final,因此在创建对象时不会收到任何令人不快的意外。