黑马程序员技术交流社区
标题:
调用方法的参数为什么是Object obj
[打印本页]
作者:
孙娜
时间:
2013-3-18 11:27
标题:
调用方法的参数为什么是Object obj
本帖最后由 孙娜 于 2013-3-18 17:01 编辑
视频里讲的集合框架里面用了很多Object obj的参数,听不懂了,比如下面这段代码红字部分,谁给讲解一下
mport java.util.*;
class CollectionDemo
{
public static void main(String[] args)
{
//创建一个集合容器,使用Collection接口的子类。ArrayList
ArrayList a1=new ArrayList();
//1、添加元素
a1.add("java01");//add(objedt obj);<font color="#ff0000">为什么这里是Object obj</font>
a1.add("java02");
a1.add("java03");
a1.add("java04");
//获取个数,集合长度
sop("size:"+a1.size());
}
public static void sop(Object obj)//<font color="#ff0000">为什么这里传的形参是Object类型的</font>
{
System.out.println(obj);
}
}
复制代码
作者:
爪哇攻城狮
时间:
2013-3-18 11:38
Object是父类,用毕老师的话说Object是上帝。
当你不知道传递的是什么类型的时候,可以用Object 。最高级别了
作者:
陈丽莉
时间:
2013-3-18 14:26
若还有问题,请继续追问,没有的话,请将帖子分类改成【已解决】~
作者:
杨玉辉
时间:
2013-3-18 14:36
简单点讲就是
Object obj = new ArrayList(); // ArrayList al = new ArrayList():
sop(al);al 就是Object的一个具体子类对象
父类 obj 的引用 指向子类的对象。相当于Object al = new ArrayList(); Object 是所有对象的父类,可接收子类对象
调用方法的时候,你必须指明你要传递进来的对象,他们之间的转换是在JVM 底层实现的
作者:
郝强勇
时间:
2013-3-18 15:24
我觉得是这样的,集合是一个容器,这个容器不同于数组的就是这个容器只能装对象,但集合的“记性”不是太好,你将对象存进去后,集合瞬间就会“忘记”你存进来的到底是什么类型的,所以在取出来的时候都是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了。
作者:
谢洋
时间:
2013-3-18 15:40
ArrayList的原型ArrayList<E>是一个泛型类型的类,其中它的add(E e)也就一个泛型方法,也就是说你传什么类型参数进去都可以?
那为什么可以做到传入参数都可以?那只有上帝才能做到,我认为编译后,所有泛型的类型的泛型实参都变成了Object,
作者:
徐鸿燕
时间:
2013-3-18 16:15
毕老师说,Object就是上帝!!
作者:
孙娜
时间:
2013-3-18 17:00
谢谢大家!终于知道上帝的威力了,原来如此!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2