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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡威 黑马帝   /  2012-2-14 09:49  /  2231 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Map<String,String> m=new TreeMap<String,Strng>();
然后sop(m);
public static void sop(Object obj)

请问:TreeMap已经向上转型成Map了,此时m已经转型成Map接口了,这时把m传递个Object为什么也可以啊?m现在不已经是接口了吗,可以把接口传递给Object吗?

6 个回复

倒序浏览
只要是对象都可以传递给Object作为参数。老祖宗来着。。TreeMap也是一个类,创建的对象也不例外。

函数代码运行过程再根据实际情况强转。。如果你这个是打印方法的话,会调用TreeMap的toString方法
回复 使用道具 举报
我表示没看懂楼主要表达的东西。
Map<String,String> m=new TreeMap<String,Strng>();//这个是父类(Map是接口)引用指向子类(TreeMap实现Map接口的类)对象,是多态表现形式。m是一个对象,实现了Map接口类的对象,而且(from API:类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法).说明m也是一个Object类的对象,当然可以传到sop(Object obj)方法里。因为接口不能实例化,所以不能直接传接口,但是可以传实现了接口的类的对象。
回复 使用道具 举报
每个类的基类都是Object

举个例子
比如人的基类都是人类

class JAVA程序员 extends 人类 implements 编程

“编程”接口的实现可以有 c++程序员,java程序员

编程 m = new JAVA程序员();
当然 现在的m 也是一个人类。

评分

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

查看全部评分

回复 使用道具 举报
我有点明白楼主的意思了,楼主认为方法sop(Object obj)
只能传递对象作为参数,Map<String,String> m=new TreeMap<String,Strng>();
MAP是集合类接口,认为m不能作为参数传递进去,这是由于Java执行期型别辨析的结果,所以编译的时候不会检查具体型别,执行时就知道是TreelMapL类型的了,强制转变不能改变m的具体型别

评分

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

查看全部评分

回复 使用道具 举报
明了 谢谢
回复 使用道具 举报
Map的实际对象是TreeMap类型的。像毕老师所说,Object是上帝,Map是它的子民。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马