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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王宝龙 中级黑马   /  2012-9-7 14:07  /  2339 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王宝龙 于 2012-9-9 23:29 编辑
  1. class InputDemo
  2. {
  3.         public static void main(String [] arge)
  4.         {
  5.                 sop("123456789");

  6.         }
  7.         public static void sop(Object obj)
  8.         {
  9.                 System.out.println(obj);
  10.         }
  11. }
复制代码
这样一段代码定义了一个用于输出的sop方法,我们像里面传入了“123456789”的字符串方法竟然依然可以打印,这是多态吗?不太理解
为什么定义一个Object对象却可以接受任何的东西进行输出。

10 个回复

倒序浏览
这就是多态,因为String类是Object的子类,Object是所有类的父类
public static void sop(Object obj)中的参数传进来String类型就相当于object obj= new string(“123456789”)
回复 使用道具 举报
Object 是所有类的超类,也就是父类。所以作为参数它可以接收任意的类型。不但如此,所有的对象也都实现Object中的方法。
回复 使用道具 举报
是多态,Object是所有类的超类,String也是其子类。
就像你定义的形式参数是人类,只要往里面传人类范围内的实际参数即可,传个“张三”当然没问题,因为他是“人类”。
回复 使用道具 举报
java中多态主要有一下体现形式:
第一:方法的重载和重写
第二:对象的多样性
这个题目中体现的是对象的多态性,对象的多态性体现在两种类型:、
1、向上转型-------->子类向上转型
2、向下转型-------->父类向下转型
回复 使用道具 举报
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。-----来自API文档

所以这个方法中定义了Object o  就可以接收到继承自object所有类的对象。

Object[] obj这样的形式,就是一个Object数组构成的参数形式。说明这个方法的参数是固定的,是一个Object数组,至于这个数组中存储的元素,可以是继承自Object的所有类的对象。
回复 使用道具 举报
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
很简单的理解Object是他们的祖宗。
回复 使用道具 举报
哥们你答对了,这就是多态
毕老师视频中讲过的,Object是上帝,是超类,是所有类的父类
所以String是Object的”子民“,
"123456789"这个字符串是String的”子民“,那么它也是Object的”子民“

你看看毕老师讲的那个animal,cat,dog的例子就明白了
黑猫是cat,黑猫也是animal
黑狗是dog,黑狗也是animal
回复 使用道具 举报
这是多态的体现形式,object 是所有类的父类,包括String类,所以定义接收值类型为object,函数就可以接收所有类型的参数。

至于你问的为什么要这样做,很简单,作者无非就想实现一个功能,无论传入一个String,int 还是boolean,我都把他打印出来。如果不用多态,而用函数重载来把每个接收值类型的函数都定义一遍是很麻烦的。

但是也存在一个异常发生的可能,如果传入的是一个对象,那么函数打印的就是一个对内存的地址值了,所以可以再定义一个异常使代码更富有健壮性。
回复 使用道具 举报
必须是多态啊。。。再传参数时,父类引用(obj)指向子类对象("123456789"),但是你执行得默认是调用子类对象方法toSstring().
主要是看你的toString()是否被重写。。不同的obj 打印输出结果会不同
回复 使用道具 举报
问题已解决  谢谢大家!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马