问答详情
源自:4-4 学生选课---添加课程 Ⅰ

为什么不直接将courses创建为ArrayList类型的呢?

this.courses = new ArrayList<Course>()这里用ArrayList去实现List接口,为什么不直接将courses创建为ArrayList类型的呢?

提问者:天涯蝶舞 2015-12-28 21:06

个回答

  • mmotiy
    2015-12-28 23:48:09
    已采纳

    List是一个接口,而ArrayList 是一个类。 ArrayList 继承并实现了List。
    List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性。

    为什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢? 
    问题就在于List有多个实现类,如 LinkedList或者Vector等等,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类呢?,这时你只要改变这一行就行了:List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。假设你开始用 ArrayList alist = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。 ,如果没有特别需求的话,最好使用List list = new LinkedList(); ,便于程序代码的重构. 这就是面向接口编程的好处


    以上回答来自百度知道http://zhidao.baidu.com/link?url=5BnCewQtw8nx7eY8RAwmVPvyxX3h4Mez2DyLmiWi-9GMDcOrf0A2NYNQ8RlsWJJ_A5Pq4s1WKAw0IuZWSEMO8K

  • T王者归来
    2016-02-06 12:55:06

    父类指向子类,方便后期维护,项目经验啊。

  • 还在2
    2015-12-28 21:52:54

    List list = new ArrayList<String>();

    ArrayList<String> arrayList = new ArrayList<String>();

    这样两种代码都是可以的。

    其实楼主可以把你的代码都贴出来,这样看的别人看起来更容易看出错误.