我看书上写代码这样写:
List s = new ArrayList();
为什么左边的类型要是list 呢?

解决方案 »

  1.   

    List是ArrayList实现的接口啊,这很正常啊
      

  2.   

    List只是接口,ArrayList是它的一种实现。也可以有其它大量实现的,你可以查查JDK的API文档。All Known Implementing Classes:
    AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector
      

  3.   

    当然你也可以
    ArrayList s = new ArrayList();只是习惯这么写,ArrayList是List接口的其中一种实现,
    其他还有LinkedList等等。
      

  4.   

    假设有个接口 (生物)
    interface 生物 {}
    有个类 (人)
    class 人 implements 生物
    还有另一个类 (猴子)
    class 猴子 implements 生物
    那么
    生物 a = new 人();的时候,a属于 生物 类,指向 人 对象(实例),
    这时,可以让a重赋值为另一个猴子对象(实例),即 a = new 猴子();而如果是定义
    人 a = new 人();那么a就只限定是 人 类,就不能让a重新赋值为猴子对象(实例)所以,用接口或抽象类定义变量,具有一定的灵活性
      

  5.   

    arrayList 是list接口的实现啊...
      

  6.   

    arrayList 是list接口的实现啊... 
    上转型啊
      

  7.   

    arrayList 是list接口的实现啊...
      

  8.   

    List只是接口,ArrayList是它的一种实现
      

  9.   

    ArrayList是List接口的实现,这个好理解
      

  10.   

    用接口new可以获得跟多的方法
      

  11.   


    因为List是接口。但是ArrayList是其中的一个实现。因此可以List s = new ArrayList();
    LinkedList HashList等等都是List的一个实现而已。
      

  12.   

    List只是一个定义好的规范/规则,而ArrayList就是满足了List规范的一个子类而
    但是满足List规范的还有别的子类,所以当程序需要换别的实现了List规范的子类的时候就方便很多了
    这么写,可扩展性好。
      

  13.   

    就比如:现在你要开车去超市,而开车去超市有很多条路线,并且开车你要实现交通规则
    而List在此,就是相当于交通规则
    ArrayList就相当于你遵守了规则,然后按照一条固定路线开车去了超市
    那么,如果有一天,你要换路线呢?你发现一条更方便的路线,你想换,那么,只需要换Arraylist就可以了,List这个交通规则依旧需要遵守的。这么讲不知道能否明白?
      

  14.   

    接口引用指向实现类对象,将ArrayList看成List来用
    当具体的实现类要替换时,直接更换,后面的代码不用改