java中 List mylist =new ArrayList 怎么理解
8个回答
展开全部
List是java.util包中的一个定义集合对象的接口,ArrayList是实现List接口的实现类。
单就这个语法而言,如使用List mylist =new ArrayList();定义对象时,比使用ArrayList mylist =new ArrayList();易于扩展;如当你在使用中发现ArrayList类型的对象不能满足你的使用要求时,你可以改成其他的实现List接口的对象类修改你的对象,如mylist = new LinkedList();这样就不需要再定义新的对象了。
深一点讲:这属于面向接口的编程。接口是java为了解决多继承的问题(java中不支持多继承)而设定的。但有了接口后,便有了面向接口的编程。
一个接口可以对应多个实现类,对于声明为接口类型的方法参数、类的字段,它们要比实现类更易于扩展、稳定。
面向接口编程带来的好处是很多,减少耦合度,只要增加新的功能即可,不用动原来的程序。23种设计模式大部分是用面向接口编程来实现的。
说的形象一点:就是把自己当成人来思考。
单就这个语法而言,如使用List mylist =new ArrayList();定义对象时,比使用ArrayList mylist =new ArrayList();易于扩展;如当你在使用中发现ArrayList类型的对象不能满足你的使用要求时,你可以改成其他的实现List接口的对象类修改你的对象,如mylist = new LinkedList();这样就不需要再定义新的对象了。
深一点讲:这属于面向接口的编程。接口是java为了解决多继承的问题(java中不支持多继承)而设定的。但有了接口后,便有了面向接口的编程。
一个接口可以对应多个实现类,对于声明为接口类型的方法参数、类的字段,它们要比实现类更易于扩展、稳定。
面向接口编程带来的好处是很多,减少耦合度,只要增加新的功能即可,不用动原来的程序。23种设计模式大部分是用面向接口编程来实现的。
说的形象一点:就是把自己当成人来思考。
展开全部
这样的写法是好习惯,不过也没有那么夸张
List mylist=new ArrayList();只能说明声明的对象自动向上转型,并且后面你将要调用的方法是在List接口中声明过的,在运行时就会表现出多态特性;如果想用mylist来调用ArrayList中的特有方法(不在List中声明的),就不可以这样写.例如,在List接口的另一实现LinkedList中就存在许多特有的方法.
这说明了一点,想要使用接口来使其实现类有完整的多态性,就必须要求接口及其实现类的public方法完全一致,否则就应该考虑使用抽象类来代替,在抽象类中添加一个空实现,这样就可以使所有子类的方法都具有多态性.
面向接口的编程,不是说让你一遇到问题就使用接口,而是应该看究竟哪一种选择更具有通用性和可扩展性,接口是你的第一选择,但有的时候抽象类更加满足要求.
List mylist=new ArrayList();只能说明声明的对象自动向上转型,并且后面你将要调用的方法是在List接口中声明过的,在运行时就会表现出多态特性;如果想用mylist来调用ArrayList中的特有方法(不在List中声明的),就不可以这样写.例如,在List接口的另一实现LinkedList中就存在许多特有的方法.
这说明了一点,想要使用接口来使其实现类有完整的多态性,就必须要求接口及其实现类的public方法完全一致,否则就应该考虑使用抽象类来代替,在抽象类中添加一个空实现,这样就可以使所有子类的方法都具有多态性.
面向接口的编程,不是说让你一遇到问题就使用接口,而是应该看究竟哪一种选择更具有通用性和可扩展性,接口是你的第一选择,但有的时候抽象类更加满足要求.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最简单的说,List是一个接口,ArrayList是一个类,并且ArrayList实现了List接口的所有方法。
前者的好处就是:当这个集合作为返回值时(返回List类型),无论以后笔者是否要更换新的集合(就是将ArrayList更换成其他的集合),比如说Vector或者LinkedList,都不用再次更换这个方法要返回的值,因为这些集合类型都实现了List接口。从而也不用再次更改调用这个方法的方法中的代码,从而大大减小了代码耦合。
就是说,不用改更多的代码了。
无论以后的工作还是学习中,这样做都是应当提倡的!
前者的好处就是:当这个集合作为返回值时(返回List类型),无论以后笔者是否要更换新的集合(就是将ArrayList更换成其他的集合),比如说Vector或者LinkedList,都不用再次更换这个方法要返回的值,因为这些集合类型都实现了List接口。从而也不用再次更改调用这个方法的方法中的代码,从而大大减小了代码耦合。
就是说,不用改更多的代码了。
无论以后的工作还是学习中,这样做都是应当提倡的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
造了一个对象实例new ArrayList ,因为是用他的父类list声明的,所以可以调用List的属性和方法。
是一种多态的表现。
例如,你造了一个父类叫Father 一个子类叫Son
可以这样 Father fs=new Son();
是一种多态的表现。
例如,你造了一个父类叫Father 一个子类叫Son
可以这样 Father fs=new Son();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
面向接口编程,符合开闭原则,对扩展开放,对修改关闭.
这样的程序便于维护,慢慢会有很深的体会...
这应该属于设计的范围..
这样的程序便于维护,慢慢会有很深的体会...
这应该属于设计的范围..
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询