【问题引入】
要实例化一个集合类型的对象,有以前几种方式。
List alist;
List blist=new List();
List clist = new ArrayList();
ArrayList dlist=new ArrayList();
结果是:
【知识分析】
在Java中,List是一个接口,而ArrayList是一个实现类。所以List不能被构造,但是可以为List创建一个引用,而ArrayList可以被构造。
Java中,List只是定义了一堆接口,而对于这些接口,有各种各样的实现,比如ArrayList,LinkedList、Vector等。
首先,面向接口编程的好处,上文中都是使用的ArrayList实现,如果有某一个地方我需要换成其他的实现,只需要改变成下面的代码即可,其他地方不用改动。
List list = new LinkedList();
其次,不同的实现会有自己不同的特性以及追加自己特有的方法。当你仅仅使用List的通用接口方法时,定义成List,也就是面向接口编程。如果我们想用ArrayList的某个特有方法的时候,如果定义成List的话,就需要转型成ArrayList之后才能使用,当然我们也可以直接使用第四种方式来定义。