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

来源:4-4 学生选课---添加课程 Ⅰ

天涯蝶舞

2015-12-28 21:06

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

写回答 关注

3回答

  • 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

    天涯蝶舞

    非常感谢!

    2015-12-29 14:43:35

    共 1 条回复 >

  • 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>();

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

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

    还在2 回复天涯蝶舞

    List<> list = new Arraylist<>(); 具体的原因我也不是很清楚,我个人猜测其中一个原因是把方法的参数定义为这样的接口类型,这样无论传什么样的这个借口的具体实现类都可以直接拿来用,也就是多态!

    2015-12-29 12:28:47

    共 2 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题