A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小飞龙 初级黑马   /  2013-3-3 00:04  /  2359 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Map<String,String> map = new HashMap<String,String>();

疑问:创建HashMap时为何左边类型是父类 Map 而不是 HashMap ?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

11 个回复

倒序浏览
  1.                 Map<String,String> map = new HashMap<String,String>();
  2.                
  3.                 HashMap<String,String> map2 = new HashMap<String,String>();
复制代码
这两种都可以的,HashMap 基于 Map 接口的实现;写成Map大家的用接口的习惯(好的)

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
父类引用指向子类对象,多态的应用
回复 使用道具 举报
{:soso_e103:} 大师们都是面向接口的。
回复 使用道具 举报
为什么能这么写那是因为这个是java中的多态的体现。你可以去适当的学习下多态方面的知识点,另外这么写还有它的优点的。
一般情况下 我们为了提高代码的灵活性,我们都会这样编程,这是一种思想,面向接口编程的思想,比如  Collection collection = new ArrayList()   List list = new ArrayList()
1 这样做的好处是显而易见的,当程序的下层需要改变时,只要接口及接口功能不变,则接口之上的上层不用做任何修改。甚至可以在不改动上层代码时将下层整个替换掉。
2 当有时候我们实际当中会不固定的用哪个具体集合的时候,要随着环境变化而变化的时候,我们会把这个Collection collection = new ArrayList()中这个 后面一段代码new ArrayList()会用反射和io的知识点,去加载相应的配置文件然后再创建出一个新集合。

个人愚见 对错请检阅,希望对你有帮助,仅供参考

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 回答很细,赞一个!

查看全部评分

回复 使用道具 举报
左边也可以用HashMap的,这个不是固定的。但是用Map有一点,楼上也说了,就是多态,不过不好之处,就是当你调用HahsMap中特有的方法,而Map中没有,就需要强转了。有些麻烦。当然这不是大问题,你可以看看关于多态相关知识,和集合的一些知识。
回复 使用道具 举报
这种方式是面向接口编程,是多态的表现形式,使用的条件就是HashMap是Map的实现类,当然存在继承关系也可以,比如:class A extends B{} 那么父类的引用可以指向子类的实例(也就是子类对象)即:B b = new A(); 但是如果B类中没有A类中的方法,需要将b类型先强制类型转换为A类型,才能使用A类中的方法,多态可以使程序更灵活Map类型不仅仅可以引用HashMap类型的,也可以引用TreeMap类型。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
我也来学习学习{:soso_e130:}
回复 使用道具 举报
Map不是HashMap的父类,是接口。HashMap的父类是 AbstractMap
回复 使用道具 举报
这就是Java的多态的特性,java的动态绑定,使用父类引用指向子类对象,
再调用某一父类中的方法时,不同子类会表现出不同结果。 这样的作用就是扩展性极好,
玩过网游的话应该知道 游戏中有不同的角色,它们都有一个父类,它们做相同动作时表现
出来的效果就会不一样,比如跑,魔法师的跑跟战士的跑就不会一样,这就是俩者都覆盖了
父类中的跑方法,各自有自己的现实,表现出来多态。  如果有一天你想再加个角色,只用再
写一个类继承该父类,覆盖其中的跑方法就行了,其他代码不用怎么改,所以可维护性也很好。

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
如果仍有问题,可以继续追问;若没有问题了,请及时将帖子分类改成【已解决】~

http://bbs.itheima.com/thread-37643-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马