1.优先使用接口而不是类来引用对象。如果有合适的接口类型存在,那么对参数、返回值、变量和域来说,就应该使用接口类型进行生命。只有当利用构造器创建某个对象的时候才真正需要引用这个对象的类;
List<Subscriber> subscribers = newArrayList<Subscriber>();
2.如果没有合适的接口存在,完全可以用类而不是接口来引用对象,有三种情况:
1.具体类没有相关联的接口,例如:Random类;
2.对象属于基于类的框架,例如TimerTask抽象类;
3.类实现了接口,但它提供了接口中不存在的而外方法,例如:LinkedHashMap,如果程序依赖这些额外的方法,这种类就应该只被用来引用它的实例。