区分:
List是一个接口,而ArrayList是List接口的一个完成类。ArrayList类继续并完成了List接口。
因而,List接口不能被组织,也就是我们说的不能建立实例对象,然则我们能够像下面那样为List接口建立一个指向本身的对象援用,而ArrayList完成类的实例对象就在这充当了这个指向List接口的对象援用。
Animals.java public abstract class Animals { //动物名字 String name; //动物啼声 public void shout(){ System.out.println("啼声----"); } } Dog.java public class Dog extends Animals { //狗类独占的要领 public void guard(){ System.out.println("狗独占的看门本事"); } } Test.java public class Test { public static void main(String[] args) throws ClassNotFoundException { Animals a1 = new Animals(); Animals a2 = new Dog(); } }
List list;//准确,list = null; List list = new List();//是毛病的用法
List list = new ArrayList();
这句建立了一个ArrayList完成类的对象后把它上溯到了List接口。此时它就是一个List对象了,它有些ArrayList类具有的,然则List接口没有的属性和要领,它就不能再用了,而
ArrayList list=newArrayList();
建立一对象则保留了ArrayList的一切属性和要领。
Test.java public class Test { public static void main(String[] args) throws ClassNotFoundException { Animals a2 = new Dog(); a2.shout(); a2.guard(); } }
父类不能再挪用父类涌现而子类没有涌现的要领。不然会编译失足。
假如是下面这个模样的:
List a=new ArrayList();
则a具有List的一切属性和要领,不会具有其完成类ArrayList的独占的属性和要领。
假如List与ArrayList中有雷同的属性(如int i),有雷同的要领(如void f()),
则a.i是挪用了List中的i,a.f()是挪用了ArrayList中的f();
题目的症结:
为何要用 List list = new ArrayList()
而不必 ArrayList alist = new ArrayList()
呢?
题目就在于List接口有多个完成类,如今你用的是ArrayList,或许哪一天你须要换成别的的完成类,如:
LinkedList或许Vector等等,这时候你只需转变这一行就好了: List list = new LinkedList();
别的使用了list处所的代码基础不须要修改。
假定你最先用ArrayList alist = new ArrayList()
, 这下你有的改了,特别是假如你使用了ArrayList完成类特有的要领和属性。
引荐教程:Java教程
以上就是java中list与arraylist的区分的细致内容,更多请关注ki4网别的相干文章!