黑马程序员技术交流社区

标题: 多态情况下的传递 [打印本页]

作者: 胡威    时间: 2012-2-14 09:49
标题: 多态情况下的传递
Map<String,String> m=new TreeMap<String,Strng>();
然后sop(m);
public static void sop(Object obj)

请问:TreeMap已经向上转型成Map了,此时m已经转型成Map接口了,这时把m传递个Object为什么也可以啊?m现在不已经是接口了吗,可以把接口传递给Object吗?
作者: 陈丹阳    时间: 2012-2-14 10:15
只要是对象都可以传递给Object作为参数。老祖宗来着。。TreeMap也是一个类,创建的对象也不例外。

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

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

class JAVA程序员 extends 人类 implements 编程

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

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


作者: 石德志    时间: 2012-2-14 23:21
我有点明白楼主的意思了,楼主认为方法sop(Object obj)
只能传递对象作为参数,Map<String,String> m=new TreeMap<String,Strng>();
MAP是集合类接口,认为m不能作为参数传递进去,这是由于Java执行期型别辨析的结果,所以编译的时候不会检查具体型别,执行时就知道是TreelMapL类型的了,强制转变不能改变m的具体型别
作者: 胡威    时间: 2012-2-15 09:30
明了 谢谢
作者: 黄锦成    时间: 2012-2-15 12:17
Map的实际对象是TreeMap类型的。像毕老师所说,Object是上帝,Map是它的子民。




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