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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yang_zhi_xiang 中级黑马   /  2015-1-26 19:26  /  1721 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Map是接口,而HashMap是类,怎么能写成Map map = HashMap();这到底什么意思

9 个回复

正序浏览
木羊 发表于 2015-1-27 00:36
那么调用方法是用的谁的方法?

编译的时候看父类的    运行的时候看子类的,也就是调用子类的方法
回复 使用道具 举报
Jaybor 中级黑马 2015-1-27 17:09:36
9#
多态的说,毕竟HashMap实现了Map接口
回复 使用道具 举报
这是多态,HashMap类实现了Map接口,Map就可以引用HashMap实例对象
回复 使用道具 举报
这是多态的特点
回复 使用道具 举报
d7142947 发表于 2015-1-26 23:52
多态  父类引用子类对象
比如

那么调用方法是用的谁的方法?
回复 使用道具 举报
多态  父类引用子类对象
比如
  1. class Fu{
  2. ............
  3. }
  4. class Zi extend Fu{
  5. ................
  6. }
复制代码


这样实例化子类的时候可以写成
Zi z = new Zi();
或者多态写成  Fu z = new Zi();   即用父类引用指向子类对象,实际上还是实例化的子类对象
回复 使用道具 举报
Map map = new HashMap();
这个代码的右边才是真正创建的实例的类型,左边只是表示这个map变量的引用类型,虽然看起来是Map的,但实际上还是HashMap的。
回复 使用道具 举报
这个是父类引用指向子类对象,是多态,建议楼主看下多态。以后会经常碰到,这样写的好处就是,比如你以后的容器变化,例如变成TreeMap,只需要将代码改成Map map=new TreeMap();是不是很方便啊。

评分

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

查看全部评分

回复 使用道具 举报
yang_zhi_xiang 来自手机 中级黑马 2015-1-26 19:27:57
沙发
写错了,是Map map = new HashMap();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马