gpt4 book ai didi

oop - 什么时候防止类继承?

转载 作者:行者123 更新时间:2023-12-04 17:25:44 24 4
gpt4 key购买 nike

最近有人告诉我,在面向对象编程中的一个很好的实践是。你应该总是允许继承你的类 .我真的不这么认为,但我没有可靠的论据。

真实世界阻止继承的示例 :

  • 没有 C++ STL 类(专用类模板)允许继承(具有非虚拟析构函数)。
  • Java 有它的 final适用于许多标准组件的类修饰符,例如 java.lang.String .

  • 可能原因我认为是:
  • 安全 ,因为子类可能有权访问敏感的内部。 (我不这么认为——他们不会访问私有(private)成员。)
  • 业绩 ,因为子类可能会通过覆盖一些成员函数来破坏我们的高效实现。 ( child 不会覆盖非虚拟函数。)
  • 强制组合而不是继承 . (我完全同意。我们不应该支持不需要的继承。)

  • 所以我的问题是: 在什么情况下我应该故意阻止继承?

    最佳答案

    事实上,我试图遵循的做法,以及 Josh Bloch 在他的 Effective Java 书中推荐的做法,正是你被告知的那个相反的规则:除非你考虑过继承,否则将你的类设计为被继承,并记录了您的类必须如何被继承,您应该始终禁用继承。

    我建议阅读 Effective Java 的这一章(你不会后悔购买它),并将它展示给告诉你这条规则的人。

    不允许继承的最明显原因是不可变性。不可变对象(immutable对象)易于使用(只有一种状态),可以被缓存,在许多对象之间共享,并且本质上是线程安全的。如果类是可继承的,那么任何人都可以扩展该类并通过添加可变属性使其可变。

    关于oop - 什么时候防止类继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10464406/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com