java中 List mylist =new ArrayList 怎么理解

怎么不 ArrayList mylist =new ArrayList 前者有什么好处吗 谢谢!

List是java.util包中的一个定义集合对象的接口,ArrayList是实现List接口的实现类。
单就这个语法而言,如使用List mylist =new ArrayList();定义对象时,比使用ArrayList mylist =new ArrayList();易于扩展;如当你在使用中发现ArrayList类型的对象不能满足你的使用要求时,你可以改成其他的实现List接口的对象类修改你的对象,如mylist = new LinkedList();这样就不需要再定义新的对象了。
深一点讲:这属于面向接口的编程。接口是java为了解决多继承的问题(java中不支持多继承)而设定的。但有了接口后,便有了面向接口的编程。
一个接口可以对应多个实现类,对于声明为接口类型的方法参数、类的字段,它们要比实现类更易于扩展、稳定。
面向接口编程带来的好处是很多,减少耦合度,只要增加新的功能即可,不用动原来的程序。23种设计模式大部分是用面向接口编程来实现的。
说的形象一点:就是把自己当成人来思考。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-03-15
这样的写法是好习惯,不过也没有那么夸张
List mylist=new ArrayList();只能说明声明的对象自动向上转型,并且后面你将要调用的方法是在List接口中声明过的,在运行时就会表现出多态特性;如果想用mylist来调用ArrayList中的特有方法(不在List中声明的),就不可以这样写.例如,在List接口的另一实现LinkedList中就存在许多特有的方法.
这说明了一点,想要使用接口来使其实现类有完整的多态性,就必须要求接口及其实现类的public方法完全一致,否则就应该考虑使用抽象类来代替,在抽象类中添加一个空实现,这样就可以使所有子类的方法都具有多态性.
面向接口的编程,不是说让你一遇到问题就使用接口,而是应该看究竟哪一种选择更具有通用性和可扩展性,接口是你的第一选择,但有的时候抽象类更加满足要求.本回答被提问者采纳
第2个回答  2008-08-16
最简单的说,List是一个接口,ArrayList是一个类,并且ArrayList实现了List接口的所有方法。

前者的好处就是:当这个集合作为返回值时(返回List类型),无论以后笔者是否要更换新的集合(就是将ArrayList更换成其他的集合),比如说Vector或者LinkedList,都不用再次更换这个方法要返回的值,因为这些集合类型都实现了List接口。从而也不用再次更改调用这个方法的方法中的代码,从而大大减小了代码耦合。

就是说,不用改更多的代码了。

无论以后的工作还是学习中,这样做都是应当提倡的!
第3个回答  2008-08-15
造了一个对象实例new ArrayList ,因为是用他的父类list声明的,所以可以调用List的属性和方法。
是一种多态的表现。
例如,你造了一个父类叫Father 一个子类叫Son
可以这样 Father fs=new Son();
第4个回答  2008-08-16
面向接口编程,符合开闭原则,对扩展开放,对修改关闭.
这样的程序便于维护,慢慢会有很深的体会...
这应该属于设计的范围..

java中 List mylist =new ArrayList 怎么理解
List是java.util包中的一个定义集合对象的接口,ArrayList是实现List接口的实现类。单就这个语法而言,如使用List mylist =new ArrayList();定义对象时,比使用ArrayList mylist =new ArrayList();易于扩展;如当你在使用中发现ArrayList类型的对象不能满足你的使用要求时,你可以改成其他的实现List接口的...

...aList类分别对应String、Double类型的对象mylist、mylist2?_百度...
ArrayList<E>类是接口List<E>的一个实现类,根据面向接口的编程思想,非常建议采用第一组声明方式,看上去是声明了两个List接口,实则new出来的实例是ArrayList的实例。第二组是直接声明ArrayList,new也用ArrayList来new,这是普通的声明方法,也没有什么问题,但是还是建议使用面向接口的思想来声明,以后学...

在java中怎么实例化一个List<?>
List本身是一个接口,所以,想要实例化一个List需要继承了List的类,比如ArrayList等。所以可以这样做:List<...> myList = new ArrayList<...>();

public ArrayList(Collection c)中的“?”和“E”是什么意思?
?是“任意类”的意思,extends继承不多说,E是指定类型。首先,楼上说的不错,是泛型。这是java 1.5以后引入的。从此以后,定义一个空的ArrayList需要这样,比如我需要一个MyClass的顺序表,则:ArrayList<MyClass> myList = new ArrayList<MyClass>();这是因为ArrayList类的声明是public class Arra...

c# 中的 符号 "<" 和">"表示什么意思?
List是泛型,后面<>里是泛型里存储的数据类型,在程序里经常会用到数组,但数组大小固定,用着不爽 于是用Array,但是Arrar里存的是Object类型的东西,拆箱,装箱太麻烦,于是出现了泛型,泛型存储长度不固定,而且存储的数据类型固定,List <string> mytest;表示泛型mytest里只能存储string类型的数据,其用法和...

如何new保存实体类的list 数组
List<>是泛型,不是实体数组。new方法是实例化,不是保存。举例保存数据到list实体:List<String> li=new List<String>{};foreach(Control ctl in this.Controls){ li.Add(ctl.Name); \/\/保存所有窗体层上的控件名到li对象}MessagBox(li[0].ToString());\/\/显示第一个名称 ...

Java中为什么加了@SuppressWarnings("unchecked")还是看到警告?_百度...
第二、unchecked 这个你已经加了 第

array和的
本文主要探讨Array和ArrayList在Java编程中的异同点。首先,Array在声明时需要立即实例化并指定大小,例如:int[] array = new int[3]; 或直接初始化数组,如int[] array = {1,2,3}。相比之下,ArrayList的声明更为灵活,可以仅声明而不必立即初始化,如ArrayList myList = new ArrayList();Array...

java ArrayList数组中如何插入一个元素
java ArrayList数组使用add来插入一个元素,实例如下:import java.util.ArrayList;public class Test { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(0);\/\/插入第一个元素 list.add(1); list.add(2); list.add(3); list.add...

”Array”和”ArrayList”分别是什么意思?
arraylist和vector的区别是什么呢?视频详细介绍,分分钟懂了

相似回答