最近有人告诉我,在面向对象编程中的一个很好的实践是。你应该总是允许继承你的类 .我真的不这么认为,但我没有可靠的论据。
真实世界阻止继承的示例 :
final
适用于许多标准组件的类修饰符,例如 java.lang.String
. 可能原因我认为是:
所以我的问题是:在什么情况下我应该故意阻止继承?
最佳答案
事实上,我试图遵循的做法,以及 Josh Bloch 在他的 Effective Java 书中推荐的做法,正是你被告知的那个相反的规则:除非你考虑过继承,否则将你的类设计为被继承,并记录了您的类必须如何被继承,您应该始终禁用继承。
我建议阅读 Effective Java 的这一章(你不会后悔购买它),并将它展示给告诉你这条规则的人。
不允许继承的最明显原因是不可变性。不可变对象(immutable对象)易于使用(只有一种状态),可以被缓存,在许多对象之间共享,并且本质上是线程安全的。如果类是可继承的,那么任何人都可以扩展该类并通过添加可变属性使其可变。
关于oop - 什么时候防止类继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10464406/