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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 今生2013 中级黑马   /  2014-5-21 21:53  /  1184 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 今生2013 于 2014-5-22 13:01 编辑

class GenericDemo
{
        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();

                al.add("abc01");
                al.add("abc0991");
                al.add("abc014");
                al.add(4);  //al.add(new Integer(4));

               System.out.println(al.get(0).getClass());
               System.out.println(al.get(3).getClass());

        
                Iterator<String> it = al.iterator();
                while(it.hasNext())
                {
                        String s =(String)it.next();

                        System.out.println(s+":"+s.length());
                }
        }
}

个人认为:ArrayList类里的add()方接受的是Object类型,对象添加进去的时候被转化成Object类型,那为什么调用getClass方法显示的类型还是原来的?
Student stu = new Student();
System.out.println(stu.getClass());
               
Person per = stu;
System.out.println(per.getClass());

再则我把对象类型转换后调用getClass方法显示的类型也还是原来的?求解

问题:
1.存储在ArrayList的对象是原有类型,还是Object类型?
2.为什么调用getClass方法显示的类型还是原来的?




评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 skill20 于 2014-5-21 22:22 编辑

getClass是Object的方法,哪个对象调用就会显示是这个对象由哪个类new出来的。
回复 使用道具 举报
你去看看源码或者API吧 ,我帮你截取API的add方法  boolean add(E e)  ;API的add方法接受的参数是E,E就是元素的意思,这里就是说集合里添加的是元素。E表示泛型的意思,通俗的说,你存进去的是int类型 它就相当于是add(int i),存的是string就相当于add(String str) ,那么存入的元素最初是什么类型,存入集合中依旧是这个类型,不存在什么Object的问题,建议你看看泛型这些课程   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马