第五十二:通过接口来引用对象

第四十条中有一个建议:应该使用接口而不是类作为参数的类型。更一般的地讲,应该优先使用接口而不是具体实现类来引用对象。

如果有合适的接口类型存在,那么对于参数,返回值,变量和域来说,就都应该使用接口类型进行声明。

如果你养成了使用接口作为类型的习惯,你的程序将会更加灵活。

如声明变量像这样:

List<Apple>  list = new Vector<Apple>();

而不是这样 Vector<Apple>  list = new Vector<Apple>();

由于你使用了List来声明,你的变量在后面的阶段,后面的代码依赖于List接口,不会依赖于具体的实现类Vector类。

这样你依据业务需求将具体的实现类更换成 ArrayList,而不会导致后面的代码编译出错。但是如果你后面的代码依赖

与Vector类的某些特性,如同步策略,这是就不应该简单的将Vector更换为ArrayList。

如果没有合适的接口存在,完全可以用类而不是接口来引用对象。例如值类,String和BigInteger。记住,值类很少

会用多个实现编写。它们通常是final的,并且很少有对应的接口。使用这种值类作为参数,变量,域或者返回类型是

再合适不过的选择了。更一般的讲,如果具体类没有相关联的接口,不管它是否表示一个值,你都没有别的选择,只有

通过它的类来引用它的对象。Random类就属于这种情形。

原文地址:https://www.cnblogs.com/wangliyue/p/4514649.html