java 集合类的使用

来源:百度知道 编辑:UC知道 时间:2024/04/30 15:57:51
我们知道 List 是继承Collection 接口的接口,ArrayList是实现List的类,然而我在参考书上,看到他们用了这样的定义:
List l1=new ArryList();
可以解释为什么吗?
不是接口不能实例化吗?
L1 只能操作List接口中的方法吗? 为什么不直接使用ArryList l1=new ArryList();不是更好吗?

List l1=new ArrayList();

第一,这里只是声明了一个接口的引用l1去指向实现它的类的一个对象(即new ArrayList()),并没有实例化接口。

第二,这里是一个java多态性的应用,用接口的引用去指向实现它的类的对象,这样可以很方便的调用这个类里的实现接口的方法。

第三,为什么List l1=new ArrayList()比ArryList l1=new ArryList()好呢?
我们拿着List l1可以指向所有实现了List接口的对象,而我们拿着ArrayList L1却只能指向ArrayList的对象,这就是多态性的好处

接口可以定义,但实现不可以是接口,但可以是实现接口的类.ArrayList是一个实现了List接口的类,所以可以实例化

li可以操作list和arraylist的方法,如果直接arraylist那么就只能操作arraylist的方法

多态!!

是的,所以才使用ArrayList进行实例化,只是被当作List来用而已。

其实就好像说:
我们要把某某人包装成一个明星。

上面的定义就是
我们要把一个新的ArrayList当成一个List。

相对的,下面的例子是错误的。这样才能说把接口实例化。这样是会报错的。
List l1 = new List();

如果定义l1为List,则l1只能使用List里的方法。不过l1其实还是一个ArrayList,所以你可以通过强制转型来把l1转成ArrayList来使用。
比如
ArrayList l2 = (ArrayList)l1;

或者
((ArrayList)l1).ArrayList的特有方法。

使用List来定义应该算个习惯用法,没有太多的意义,因为对于写死的定义来说没有太大的意义,但对于使用注入之类手段来实例化对象的方法来说就比较有意义了,定义为List就代表我不仅可以注入ArrayList的实例也可以注入其它List实现类的实例。这样一来