区别用几句话来简单概述就是:
1、List是一个接口,而ArrayList是List接口的一个实现类。
2、 ArrayList类继承并实现了List接口。
3、因此,List接口不能被构造,也就是我们说的不能创建实例对象,但是我们可以像下面那样为List接口创建一个指向自己的对象引用,而ArrayList实现类的实例对象就在这充当了这个指向List接口的对象引用。
因此在java中List list=new List(); 会导致编译出错,这是因为List是一个接口,接口不能被实例化。
而ArrayList list=new ArrayList();这种实例化方式就是正确的。这是因为ArrayList是一个类,继承并实现了List接口。
如何实例化List接口?
虽然List不能直接被实例化,但是他可以通过继承自本接口的实现类的对象实例化List对象,如List list=new ArrayList();这种实例化的方式:创建了一个ArrayList实现类的对象后把它上溯到了List接口。此时它就是一个List对象了,它有些ArrayList类具有的,但是List接口没有的属性和方法,它就不能再用了。 而 ArrayList list=newArrayList();创建一对象则保留了ArrayList的所有属性和方法。
两种实例化方式的区别?
那么问题来了,我们为什么不直接使用 ArrayList list=newArrayList();的方式来实例化ArrayList对象,并调用其中的方法,而有时候大部分会通过List list=new ArrayList();来实例化对象呢?
原因有二:
第一,两种实例化的方式由所区别,第一种方式创建的对象继承了ArrayList的所有属性和方法。 而第二种方式创建的对象只能调用List接口中的方法,不能调用ArrayList中的方法。
第二、使用第二种方式创建的对象更为方便。List接口有多个实现类,现在用的是ArrayList,如果要将其更换成其它的实现类,如 LinkedList或者Vector等等,这时只需要改变这一行就行了: List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。 在编写代码时,较为方便。
应该优先使用接口而不是类来引用对象,但只有存在适当的接口类型时。 使用接口类去引用对象是有前提条件的—实现类中全是接口类的方法的实现,没有自己单独的方法。
当实现类存在自己的方法时,使用实现类来声明变量。
使用接口编程的好处是统一规范化。
标签:Java,对象,list,ArrayList,List,接口,实例 From: https://www.cnblogs.com/binjianhuastudy/p/16759648.html