1. 将公共操作和域放在超类
2. 不要使用受保护的域
当超类中的实例域设置为protected时,protected机制并不能够带来更好的保护,因为:
- 子类集合是无限制的,任何一个人都能够由某个类派生一个子类,并编写代码直接访问protected的实例域,从而破坏了封装性
- 在Java中,同一个包中的所有类都可以访问protected域,而不管它是否为这个类的子类
- protected方法对于知识那些不提供一般用途而应在子类中重新定义的方法很有用
Tips:关于封装性,将数据和行为组合在一个包中并对对象使用者隐藏了数据的实现方式。关键:绝不能让类中的方法直接访问其他类的实例。如果不经过方法调用就能改变对象状态,说明封装性被破坏了。
3. 使用继承实现is-a关系
类间关系:
- 依赖:(uses-a) 一个类的方法操作另一个类的对象,这个类依赖另一个类
- 聚合:(has-a) 类A的对象包含类B的对象
- 继承:(is-a) 特殊与一般的关系
使用继承可以达到节省代码的目的
4. 除非所以继承的方法都有意义,否则不要使用继承
5. 在覆盖方法时,不要改变预期的行为
置换原则不仅应用于语法,而且也可以应用于行为。在覆盖一个方法的时候,不应该毫无缘由地改变行为的内涵。
Tips:置换原则,程序中出现超类的地方都可以用子类对象置换
6 . 使用多态,而非类型信息
使用多态性提供的动态绑定机制执行相应的操作
7. 不要过多地使用反射
反射机制是的让人们可以通过在运行时查看域和方法,让人们编写出更具通用性的程序,这种功能对于编写系统程序来说极其有用,但通常不适用于编写应用程序