1、将公共操作和域放在超类
2、不要使用受保护的域
有些人认为,将大多数的示例域定义为protected是一个不错的主意,只有这样,子类才能够在需要的时候直接访问它们。然而,protected机制并不能够带来更好的保护,其原因主要有两点:
- 子类集合是无限制的,任何一个人都能够由某个类派生一个子类,并编写代码直接访问protected的实例域,从而破坏了封装性。
- 在java程序设计语言中,在同一个包中的所有类都可以访问proteced域,而不管它是否为这个类的子类。
不过,protected方法对于指示那些不提供一般用途而应在子类中重新定义的方法很有用。
3、使用继承实现"is-a"关系
4、除非所有继承的方法都有意义,否则不要使用继承
5、在覆盖方法时,不要改变预期的行为
6、使用多态,而非类型信息
无论什么时候,对于下面这种形式的代码
if (x is of type1)
action1(x);
else if (x is of type2)
action2(x);
都应该考虑使用多态性。
action1与action2如果表示的相同的概念,就应该为这个概念定义一个方法,并将其放置在两个类的超类或接口中,然后,就可以调用:
x,action();
以便使用多态性提供的动态分派机制执行相应的动作。使用多态方法或接口编写代码比使用多种类型进行检测的代码更加易于维护和扩展。
7、不要过多地使用反射
反射机制使得人们可以通过在运行时查看域和方法,让人们编写出更具通用性的程序。这种功能对于编写系统程序来说极其实用,但是通常不适于编写应用程序。反射式很脆弱的,即编译器很难帮助人们发现程序中的错误,因此只有在运行时才发现错误并导致异常。