看了几天Java基础知识,其中关于一个接口类型的变量定义:如:
Set set = new HashSet();
或者
List list = new ArrayList();我始终不能完全理解为什么要这样来定义,为什么不直接:
HashSet set = new HashSet();
或者
ArrayList list = new ArrayList();他们个根本区别是什么,另外Set set = new HashSet();的真正用意和用途是什么???

解决方案 »

  1.   

    容易扩展和修改。
    List list = new ArrayList(); 
    后面对list的使用不用去关注list内部到底是使用何种具体类型实现的,这样,当你需要修改list的具体类型时,比较容易修改,影响的代码很少。
    比如,你希望list采用LinkedList来实现,只需要修改一句话
    List list = new LinkedList();
    后面使用list的代码不受影响。
      

  2.   


    lz,接口中是不存在“变量”的
    接口中所有属性默认都是public static final
    所以,接口中都是常量和方法
      

  3.   

    楼主刚开始看j2ee,楼上的大大们说的抽象了点
    其实用类似List list = new ArrayList();这种,主要是为了list这个接口能处于各种实现之上例子:吃的food拥有很多方法,比如饱()
    然后有这么几个实现:吃大饱,吃中饱,吃小饱
    你的需求是:你要吃大饱,你妈妈吃小饱
    那你的确可以直接: 大饱 引用=new 大饱
    你妈妈直接: 小饱 引用=new 小饱
    但是有一天,你要吃大饱加好吃,你妈妈也要吃小饱+好吃,怎么办?去创建2个新的实现类?
    所以,这个时候只要在接口中定义好吃(),然后使用food 引用=new *饱,你就可以满足需求拉,你妈妈也是一样也就是说为了抽象出会共同用到的一些方法,所以才用接口,方便实现类去使用和修改
    感觉我也没有说得很清楚,今天忙死了