读书笔记-Effective Java(类和接口)

读书笔记-Effective Java(类和接口),第1张

读书笔记-Effective Java(类和接口

读书笔记-Effective Java(类和接口)
    • 15.使类和成员的可访问性最小化
    • 16. 要在公有类而非公有域中使用访问方法
    • 17.使可变性最小化
    • 18.复合先于继承
    • 19.要么设计继承并提供文档说明,要么禁止继承
    • 20.接口优于抽象类
    • 21.为后代设计接口
    • 22.接口只用于定义类型
    • 23.类层次优于标签类
    • 24.静态成员类优于非静态成员类
    • 25.限制源文件为单个顶级类

15.使类和成员的可访问性最小化

组件可以独立地开发,加快了系统开发的速度,公有类不应该包含公有域。

16. 要在公有类而非公有域中使用访问方法 17.使可变性最小化

类的不可变遵循五条规则:

  • 不要提供任何会修改对象状态的方法
  • 保证类不会被拓展
  • 声明所有的域都是final的
  • 声明所有的域都是私有的
  • 确保对于任何可变组件的互斥访问
18.复合先于继承

包内部使用继承非常安全,包外继承则非常危险。继承打破了封装性。这样做带来的问题就是,如果父类有几个相同性质的方法,而子类要对这类性质的方法进行覆盖,如果后续父类对这类性质的方法进行了拓展或增加,子类就必须同步进行修改。使用复合方法,即在拓展类中引用现有类的一个实例。只有当子类和超类之间确实存在子类型关系时,使用继承才是恰当的。

19.要么设计继承并提供文档说明,要么禁止继承

构造器绝不能调用可被覆盖得方法,这是因为子类覆盖的方法将会在子类的构造器运行之前先被调用,如果该覆盖方法依赖于子类构造器所执行的任何初始化工作,该方法将不会如预期般执行。

对于那些并非为了安全地进行子类化而设计和编写文档的类,要禁止子类化。有两种方法禁止子类化,一种是把这个类声明为final的,一种是把所有的构造器私有化,或者包级私有,并增加一些公有的静态工厂来代替构造器。

20.接口优于抽象类

如果你导出了一个重要接口,就应该坚决考虑同时提供骨架实现类。而且,还应该尽可能地通过缺省方法在接口中提供骨架实现,以便接口的所有实现类都能使用。

21.为后代设计接口

添加缺省的方法

22.接口只用于定义类型

接口只应该用于定义类型,而不能用于导出常量

23.类层次优于标签类

标签类过于冗长,容易出错,并且效率低下,标签类真是对类层次的一种简单的仿效。类层次的一个好处就是,它们可以用来反映类型之间本质上的层次关系,有助于增强灵活性,并有助于更好地进行编译时类型检查。

24.静态成员类优于非静态成员类
  • 静态成员类:最简单的一种嵌套类。最好看作普通类,只是碰巧被声明在另一个类的内部而已。常见用法是作为公有的辅助类,
25.限制源文件为单个顶级类

不要把多个顶级类或者接口放到同一个源文件中,否则程序的行为将受源文件传输给编译器的顺序的影响。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5691117.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存