java中 List mylist =new ArrayList 怎么理解

来源:百度知道 编辑:UC知道 时间:2024/06/10 08:25:32
怎么不 ArrayList mylist =new ArrayList 前者有什么好处吗 谢谢!

这样的写法是好习惯,不过也没有那么夸张
List mylist=new ArrayList();只能说明声明的对象自动向上转型,并且后面你将要调用的方法是在List接口中声明过的,在运行时就会表现出多态特性;如果想用mylist来调用ArrayList中的特有方法(不在List中声明的),就不可以这样写.例如,在List接口的另一实现LinkedList中就存在许多特有的方法.
这说明了一点,想要使用接口来使其实现类有完整的多态性,就必须要求接口及其实现类的public方法完全一致,否则就应该考虑使用抽象类来代替,在抽象类中添加一个空实现,这样就可以使所有子类的方法都具有多态性.
面向接口的编程,不是说让你一遇到问题就使用接口,而是应该看究竟哪一种选择更具有通用性和可扩展性,接口是你的第一选择,但有的时候抽象类更加满足要求.

List是java.util包中的一个定义集合对象的接口,ArrayList是实现List接口的实现类。
单就这个语法而言,如使用List mylist =new ArrayList();定义对象时,比使用ArrayList mylist =new ArrayList();易于扩展;如当你在使用中发现ArrayList类型的对象不能满足你的使用要求时,你可以改成其他的实现List接口的对象类修改你的对象,如mylist = new LinkedList();这样就不需要再定义新的对象了。
深一点讲:这属于面向接口的编程。接口是java为了解决多继承的问题(java中不支持多继承)而设定的。但有了接口后,便有了面向接口的编程。
一个接口可以对应多个实现类,对于声明为接口类型的方法参数、类的字段,它们要比实现类更易于扩展、稳定。
面向接口编程带来的好处是很多,减少耦合度,只要增加新的功能即可,不用动原来的程序。23种设计模式大部分是用面向接口编程来实现的。
说的形象一点:就是把自己当成人来思考。

最简单的说,List是一个接口,ArrayList是一个类,并且ArrayList实现了List接口的所有方法。

前者的好处就是:当这个集合作为返回值时(返回List类型),无论以后笔者是否要更换新的集合(就是将Ar