黑马程序员技术交流社区

标题: map集合问题 [打印本页]

作者: 小飞龙    时间: 2013-3-3 00:04
标题: map集合问题
Map<String,String> map = new HashMap<String,String>();

疑问:创建HashMap时为何左边类型是父类 Map 而不是 HashMap ?
作者: 李易烜    时间: 2013-3-3 00:18
  1.                 Map<String,String> map = new HashMap<String,String>();
  2.                
  3.                 HashMap<String,String> map2 = new HashMap<String,String>();
复制代码
这两种都可以的,HashMap 基于 Map 接口的实现;写成Map大家的用接口的习惯(好的)
作者: 谢达    时间: 2013-3-3 09:07
父类引用指向子类对象,多态的应用
作者: 郑枫    时间: 2013-3-3 10:30
{:soso_e103:} 大师们都是面向接口的。
作者: Beautiful    时间: 2013-3-3 10:54
为什么能这么写那是因为这个是java中的多态的体现。你可以去适当的学习下多态方面的知识点,另外这么写还有它的优点的。
一般情况下 我们为了提高代码的灵活性,我们都会这样编程,这是一种思想,面向接口编程的思想,比如  Collection collection = new ArrayList()   List list = new ArrayList()
1 这样做的好处是显而易见的,当程序的下层需要改变时,只要接口及接口功能不变,则接口之上的上层不用做任何修改。甚至可以在不改动上层代码时将下层整个替换掉。
2 当有时候我们实际当中会不固定的用哪个具体集合的时候,要随着环境变化而变化的时候,我们会把这个Collection collection = new ArrayList()中这个 后面一段代码new ArrayList()会用反射和io的知识点,去加载相应的配置文件然后再创建出一个新集合。

个人愚见 对错请检阅,希望对你有帮助,仅供参考
作者: 黄玉昆    时间: 2013-3-3 15:10
左边也可以用HashMap的,这个不是固定的。但是用Map有一点,楼上也说了,就是多态,不过不好之处,就是当你调用HahsMap中特有的方法,而Map中没有,就需要强转了。有些麻烦。当然这不是大问题,你可以看看关于多态相关知识,和集合的一些知识。
作者: 杨剑    时间: 2013-3-3 16:36
这种方式是面向接口编程,是多态的表现形式,使用的条件就是HashMap是Map的实现类,当然存在继承关系也可以,比如:class A extends B{} 那么父类的引用可以指向子类的实例(也就是子类对象)即:B b = new A(); 但是如果B类中没有A类中的方法,需要将b类型先强制类型转换为A类型,才能使用A类中的方法,多态可以使程序更灵活Map类型不仅仅可以引用HashMap类型的,也可以引用TreeMap类型。
作者: 李辉    时间: 2013-3-4 14:36
我也来学习学习{:soso_e130:}
作者: 谭威    时间: 2013-3-4 16:40
Map不是HashMap的父类,是接口。HashMap的父类是 AbstractMap
作者: 潘廖明    时间: 2013-3-11 14:27
这就是Java的多态的特性,java的动态绑定,使用父类引用指向子类对象,
再调用某一父类中的方法时,不同子类会表现出不同结果。 这样的作用就是扩展性极好,
玩过网游的话应该知道 游戏中有不同的角色,它们都有一个父类,它们做相同动作时表现
出来的效果就会不一样,比如跑,魔法师的跑跟战士的跑就不会一样,这就是俩者都覆盖了
父类中的跑方法,各自有自己的现实,表现出来多态。  如果有一天你想再加个角色,只用再
写一个类继承该父类,覆盖其中的跑方法就行了,其他代码不用怎么改,所以可维护性也很好。
作者: 猫腻    时间: 2013-3-13 10:07
如果仍有问题,可以继续追问;若没有问题了,请及时将帖子分类改成【已解决】~

http://bbs.itheima.com/thread-37643-1-1.html





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2