• [Effective Java 读书笔记] 第三章类和接口 第十六条


    第十六条 复合优先于继承

      如果不确定B和A的关系是,is-a的关系,B确实也是A,那么久不应该使用B继承A,否则会暴露实现细节, 你的实现都会限制在原始的实现上。

      书中举的第一个例子,实现了一个类extends HashSet类,因为缺少对HashSet类的addAll方法的理解(addAll会重复调用add方法),导致多统计了一倍的调用次数,这就是自己的实现限制在父类的实现上。

         同时书中还有一个说明,如果超类在后续的版本中增加了一个新的方法, 正好和你的类里新增的方法签名一致(参数列表和函数名一致),但是返回值不一致,那么会出现编译错误(函数签名一致返回值不一致,无法重载)。

        使用复合方法可以解决这些问题,书中举得例子,是使用InstrumentedSet类来包装Set实例,统计的步骤在InstrumentedSet中实现,而对Set的操作独立出来,用一个对象来操作

  • 相关阅读:
    BestCoder 2nd Anniversary/HDU 5718 高精度 模拟
    FZU 2168 前缀和+dp递推
    poj 1088 记忆化搜索
    Codeforces Round #241 (Div. 2) B dp
    poj 3053 优先队列处理
    取消修改
    csv乱码
    iconv()
    cakephp中sql查询between
    虚拟机上linux与windows之间复制粘贴
  • 原文地址:https://www.cnblogs.com/jiangz222/p/4830921.html
Copyright © 2020-2023  润新知