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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙娜 中级黑马   /  2013-3-18 11:27  /  1644 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙娜 于 2013-3-18 17:01 编辑

视频里讲的集合框架里面用了很多Object obj的参数,听不懂了,比如下面这段代码红字部分,谁给讲解一下
  1. mport java.util.*;
  2. class CollectionDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 //创建一个集合容器,使用Collection接口的子类。ArrayList
  7.                 ArrayList a1=new ArrayList();
  8.                 //1、添加元素
  9.                 a1.add("java01");//add(objedt obj);<font color="#ff0000">为什么这里是Object obj</font>
  10.                 a1.add("java02");
  11.                 a1.add("java03");
  12.                 a1.add("java04");
  13.                
  14.                 //获取个数,集合长度
  15.                 sop("size:"+a1.size());
  16.         }
  17.         public static void sop(Object obj)//<font color="#ff0000">为什么这里传的形参是Object类型的</font>
  18.         {
  19.                 System.out.println(obj);
  20.         }
  21. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

7 个回复

倒序浏览
Object是父类,用毕老师的话说Object是上帝。

当你不知道传递的是什么类型的时候,可以用Object 。最高级别了

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
若还有问题,请继续追问,没有的话,请将帖子分类改成【已解决】~
回复 使用道具 举报
简单点讲就是
Object obj = new ArrayList(); // ArrayList al = new ArrayList():

sop(al);al 就是Object的一个具体子类对象

父类 obj 的引用 指向子类的对象。相当于Object al = new ArrayList(); Object 是所有对象的父类,可接收子类对象

调用方法的时候,你必须指明你要传递进来的对象,他们之间的转换是在JVM 底层实现的

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
    我觉得是这样的,集合是一个容器,这个容器不同于数组的就是这个容器只能装对象,但集合的“记性”不是太好,你将对象存进去后,集合瞬间就会“忘记”你存进来的到底是什么类型的,所以在取出来的时候都是Object(因为Object是所有类的父类),所以也是你在集合这经常会对取出来的元素(对象)进行向下转型,例如Person p = (Person)obj
    当然,对你的问题延伸一下也可以理解这个问题,就是你之前在学习数组的时候会这样定义:int arr[] = new int[5],定义了一个数组容器,在定义的时候就声明了这个容器装的类型是int型。在学习集合的时候,你又会这样定义集合:List list = new ArrayList();定义了一个集合容器,但这个容器装什么类型的元素呢,你没定义啊,所以默认统统装Object类型的元素,所以不管你是装person对象还是装demo对象,都是object。这也就是在泛型技术出现之前的弊端,不能很明确的一眼看上去就知道里面是什么类型的元素,泛型技术出来之后,我们可以这样定义集合:List<Person> list = new ArrayList()<Person>;这样在看上去是不是就是一个“数组”了,因为定义时限定了要存的对象类型,所以在存进去就是person了,而不是默认的object了。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
ArrayList的原型ArrayList<E>是一个泛型类型的类,其中它的add(E e)也就一个泛型方法,也就是说你传什么类型参数进去都可以?
那为什么可以做到传入参数都可以?那只有上帝才能做到,我认为编译后,所有泛型的类型的泛型实参都变成了Object,
回复 使用道具 举报
        毕老师说,Object就是上帝!!
回复 使用道具 举报
孙娜 中级黑马 2013-3-18 17:00:44
8#
谢谢大家!终于知道上帝的威力了,原来如此!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马