美文网首页
提示十九

提示十九

作者: 飞絮搅青冥 | 来源:发表于2022-06-16 00:26 被阅读0次

今天来看提示十九:要么为继承而设计,并提供文档说明,要么就禁止继承。

之前说过继承会带来很多危险,所以这一章讨论了如何正确使用继承。

  1. 首先,这个类必须准确地描述重写每个方法带来的影响。 换句话说,该类必须文档说明可重写方法的自用性(self-use)。
  2. 文档必须指明方法调用哪些可重写方法,以何种顺序调用的,以及每次调用的结果又是如何影响后续处理。
  3. 调用可重写方法的方法在文档注释结束时包含对这些调用的描述。 这些描述在规范中特定部分,标记为「Implementation Requirements」,由 Javadoc 标签 @implSpec 生成。

为了继承而进行的设计不仅仅涉及自用模式的文档设计。为了使程序员能够编写出更加有效的子类,而无须承受不必要的痛苦,类必须以精心挑选的 protected 方法的形式,提供适当的钩子(hook),以便进入其内部工作中。关于hook这段,文中用了AbstractList 中的 removeRange 方法举例,但是我以前理解的hook是通过监听某段程序,插入一些操作。和这里的hook好像不是同一种东西,感觉这里更多的为了方便用户以后重写这个方法,来提供更高效的方法。但是如果子类能够有更快速的方法来实现这种操作,完全可以把方法放在子类自己内部,为什么要在父类上加上这个方法?为了让这个基类都能实现该方法?

测试为继承而设计的类的唯一方法是编写子类。经验表明,三个子类通常足以测试一个可继承的类。 这些子类应该由父类作者以外的人编写。

还有一些类必须遵守允许继承的限制。构造方法绝不能直接或间接调用可重写的方法。(因为超类的构造器在子类的构造器之前运行,如果子类中覆盖版本的方法依赖于子类构造器所执行的任何初始化工作,该方法将不会如预期般地执行)。Cloneable 和 Serializable 接口在设计继承时会带来特殊的困难。 对于为继承而设计的类来说,实现这些接口通常不是一个好主意。

禁止对在设计上和文档说明中都不支持安全子类化的类进行子类化。

总得看下来作者为了类的继承能够被正确使用制定了很多规则,但是对于我们系统来说或许不需要如此严格。感觉这些要求更多的是对那些需要提供给外部访问的代码,比如一些工具类或者第三方的类库,它们在编写的时候可能就需要这样的考虑。

相关文章

  • 提示十九

    今天来看提示十九:要么为继承而设计,并提供文档说明,要么就禁止继承。 之前说过继承会带来很多危险,所以这一章讨论了...

  • 提示18-19可逆性

    今天继续学习本书的提示十八和十九。先看提示: 提示十八:不设最终决定。提示十九:放弃追逐时尚。 这章围绕可逆性开始...

  • 温馨提示(十九)

    1、不要拿别人的地图,寻找自己的路,每个人都是一道独特的风景。 2、如果没人护你周全,那你必须强大到没有软肋。 3...

  • 提示三十九

    提示三十九:注解优于命名模式。 文章首先指出了使用命名模式的几个问题: 拼写错误导致失败,但不会提示。 无法确保它...

  • 提示29-34

    今天继续学习有关调试的内容,先看提示: 提示二十九:去解决问题,而不是责备。提示三十:不要恐慌。提示三十一:修代码...

  • 提示二十九

    提示二十九: 优先考虑泛型。 这一章中,作者主要通过举例讲解了一个的简单堆栈实现。 因为这里的element对象是...

  • 提示38-39

    今天学习有关崩溃和断言的内容,先看提示: 提示三十八:尽早崩溃。提示三十九:使用断言去预防不可能的事情。 作者认为...

  • 我为亲爱的肝脏代言-29

    【哪些表现提示肝脏细胞损伤】 每日一更(2020.12.20,第二十九期) 第一个表现: 经常发脾...

  • 教主,你为什么捉麒麟(2)

    (前情提示:麒麟被捉却被教主一声令下送入教主房间,神马情况?) “十九年了,终于见到你了。” 不动.... “从今...

  • 我为亲爱的肝脏代言-39

    【哪些表现提示肝脏细胞损伤】 每日一更(2020.12.30,第三十九期) 第十个表现:全身的韧带和软组织很僵硬、...

网友评论

      本文标题:提示十九

      本文链接:https://www.haomeiwen.com/subject/qcpfvrtx.html