就是经常看到类似这样的construct,List list = new ArrayList();
这种构造有什么好处啊?为什么不直接定义list 为ArrayList呢?
谢谢

解决方案 »

  1.   

    这不是定义为ArrayList了么 你想问什么
    ?
      

  2.   

    你这句话已经创建了一个ArrayList 了啊?你还想怎么搞?
      

  3.   

    List为接口  ArrayList为实现类 
    就是调用接口的好处吧
      

  4.   

    程序中的方法中使用的都是List接口的方法,减少耦合度!
    例如:当你觉得ArrayList的数据结构性能不理想,
    换成LinkedList的时候,只需要变动一下声明就可以了!
    并不需要做更多的修改!
      

  5.   

    List 是接口   后边的Arraylist才是真正定义的类型!
      

  6.   

    我的意思是说,为什么要用
    List list = new ArrayList();
    这样的语句,而不是用
    ArrayList list = new ArrayList();
    后者不是更规范吗?许多程序都用前者,有何好处呢?类似的还有这样的构造:
    Object ob = new Vector();
      

  7.   

    还是以这个构造举例:
    List list = new ArrayList();
    这个list对象是不是可以调用所有ArrayList里的方法?而对外的接口则只考虑
    List这个界面下的方法?
    如果我觉得ArrayList不理想,想换成LinkedList,除了变动声明一下以外,只
    需改动调用ArrayList的方法,对外接口不变,是这样的吗?
      

  8.   

    何不敲两个demo尝试一下呢 !
      

  9.   

    LZ的意思应该是:为什么不直接定义为:ArrayList list = new ArrayList();
    而要定义为:List list = new ArrayList();吧,这是因为ArrayList继承自List,也就是说在List中实现的方法,在ArrayList中一定得到了实现,所以当你调用一些List中的方法时时行得通的。举个例子说一下:Father是一个父类,Son是个子类,你可以这样定义:Father f = new Son();
    不知道LZ是否明白了,如果还是不明白的话,就看看马士兵讲的有关java视频吧,看看就明白了。
      

  10.   

    这应该就是个范围大小的问题,方便以后改动,就算以后把arraylist改了,也不用修改后面的程序,他提供的是list的公共方法
      

  11.   

    List是集合的父类,引用它,扩展性强
      

  12.   

    如果将来你发现这个定义并不合适你的设计,你想把他换成LinkedList,那么是不是你前前后后,所有的相对应的都要从ArrayList换成LinkedList呢?所以,直接定义List,就像多态的实现,父类引用指向子类对象,这样以后再改,只需要把ArrayList换成LinkedList而中间的内容是不需要再去重改的,这样只是增强了代码的灵活性
      

  13.   

    使用List是一个约束,这样你在后面用到该对方的方法时,都只能使用List中已经提供的方法,而不是ArrayList里面的方法。而这样的约束,可以保证以后在将ArrayList改成LinkedList时,只需改new对象的这一处地方,无需改其他地方。
      

  14.   

    java的三大特性之一:多态。
    List list=new ArrayList()
    这样写的好处在于提高可扩展和可维护,并减少类中得代码量。
    通俗一点就是说,同一个实现接口,使用不同的实例而且执行不同的操作。
      

  15.   

    多态,
    方便扩展这样写,你可以很随意的改
    List l = new LinkedList()
      

  16.   

    因为ArrayList比List具体,越是具体的其适用也越窄,限制越多;越是抽象,限制也就越少
    楼上说哪天换成linklist就是一个很好的例子;
    但并不是所有情况都这样最好,如果你或许调用都是对ArrayList的操作,那不如直接就声明为ArrayList
      

  17.   

    这是java的多态, 这样写可以降低耦合
      

  18.   

    楼上的各位说我现在定义为
    List list = new ArrayList();
    哪一天觉得使用ArrayList的数据结构不理想,想换成LinkedList,把上面
    这个statement换成 
    List list = new LinkedList();就行了。
    因为对外接口都是基于List的,而不是ArrayList中定义的方法。
    那么为什么不一开始就写成
    List list = new List();呢?
      

  19.   

    介绍多态时候这就是一个例子 声明称List  实现接口list,使用不同的实例而且执行不同的操作 list 声明为ArrayList 或者linkedList 接口执行相对应的操作 
      

  20.   

    这是父类引用指向子类
    加大程序的灵活性
    比如List list = new ArrayList();
    现在要改成LinkedList
    基本程序代码是不用改变的
    不知楼主是否能体会这种写法带来的好处?
      

  21.   


    package com.yang.csdntest;import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;public class InterfaceProgram { public void testlist(List list){

    list.add("aaaa");
    }
    public static void main(String[] args) {
    InterfaceProgram interfaceProgram = new InterfaceProgram();
    List list = new ArrayList();//1、函数传ArrayList对象;
    interfaceProgram.testlist(list);
    List list2 = new LinkedList();
    interfaceProgram.testlist(list2);//2、函数传递LinkedList对象

    }
    }
    面向接口编程有利于增加程序的灵活性
      

  22.   

    List为接口 ArrayList为实现类  这样就定义了ArrayList类
      

  23.   

    看看 thinking in java ,讲的很详细
      

  24.   

    List list = new ArrayList();
    多态的用法,ArrayListlist = new ArrayList();可以的List list = new ArrayList();一定可以。