第15条:使类和成员的可访问性最小化
正确使用public、protected、private三个修饰符
第16条:要在公有类而非公有域中使用访问方法
对象属性应该私有化,然后提供getter、setter方法。而不是公有化属性,使用对象.属性(obj.field)访问
第17条:使可变性最小化
JDK中包含许多不可变的类(使用 final 修饰符),包含String、基本类型的包装类。不可变对象本质上是线程安全的,不要求同步
第18条:复合优先于继承
继承需要清楚的知道父类的具体代码逻辑,不然覆盖方法可能会出现奇怪的BUG。而复合,是把父类作为成员变量,调用其方法即可
第19条:要么设计继承并提供文档说明,要么禁止继承
参考第18条
第20条:接口优先抽象类
一般都是面向接口编程,抽象类适合抽取子类的代码作为公共代码,子类只需要实现抽象方法即可
第21条:为后代设计接口
在接口里添加默认方法,存在风险,应当谨慎
第22条:接口只用于定义类型
现在一般都有专门的常量类,跟这条相违背。但是专门的常量类利于维护
第23条:类层次优于标签类
没在其他地方见过标签类的写法,面向接口编程就可以避免这种情况
第24条:静态成员类优先于非静态成员类
- 非静态成员类每个实例都持有一个外部对象的引用,保存这份引用需要消耗时间和空间
- 静态成员类是外部类的一个静态成员,与外部类其他的静态成员一样,遵守同样的可访问性规则
第25条:限制源文件为单个顶级类
除了内部类的情况,不要在一个文件中写两个及以上的类