日期:2014-05-20  浏览次数:20648 次

接口变量定义
看了几天Java基础知识,其中关于一个接口类型的变量定义:

如:
Set set = new HashSet();
或者
List list = new ArrayList();

我始终不能完全理解为什么要这样来定义,为什么不直接:
HashSet set = new HashSet();
或者
ArrayList list = new ArrayList();

他们个根本区别是什么,另外Set set = new HashSet();的真正用意和用途是什么???


------解决方案--------------------
容易扩展和修改。
List list = new ArrayList(); 
后面对list的使用不用去关注list内部到底是使用何种具体类型实现的,这样,当你需要修改list的具体类型时,比较容易修改,影响的代码很少。
比如,你希望list采用LinkedList来实现,只需要修改一句话
List list = new LinkedList();
后面使用list的代码不受影响。
------解决方案--------------------
面向接口编程,方便扩展
------解决方案--------------------
写代码尽量基于抽象而不是基于实现,接口编程的最大好处就是将服务的提供者和服务的使用者分开,这样服务的使用者是关心标准而不用关心具体的实现,以后如果服务的实现变了,而上层应用代码不需要做任何改变,从而降低系统耦合。
------解决方案--------------------
探讨
容易扩展和修改。
List list = new ArrayList();
后面对list的使用不用去关注list内部到底是使用何种具体类型实现的,这样,当你需要修改list的具体类型时,比较容易修改,影响的代码很少。
比如,你希望list采用LinkedList来实现,只需要修改一句话
List list = new LinkedList();
后面使用list的代码不受影响。