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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙涛00 中级黑马   /  2013-10-29 13:03  /  1080 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                Vector<String> vect = new Vector();//编译通过,正确
                Vector vect2 = new Vector<String>();//编译通过,正确
               
                Vector<Object> vect3 = new Vector<String>();//编译失败,错误
               
                Vector v1 = new Vector<String>();//编译通过,正确
                Vector<Object> v = v1;//编译通过,正确

问题:Vector<Object> v = v1;//编译通过,正确    为什么是正确的?和第三个编译失败额那个有什么区别?

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
你 可以这样理解,第一个Vector<Object> vect3 = new Vector<String>();//编译失败,错误,这个是因为你前面已经标明了是一个Object说明是什么类型都可以存,后面有给一个字符串的类型,所以会错误,   Vector v1 = new Vector<String>();//编译通过,正确
                                   Vector<Object> v = v1;//编译通过,正确
后面那个正确是因为你后面那个 Vector<Object>它可以接收任意类型,而Vector v1 = new Vector<String>();存的是字符串,你把一个存的是字符串的赋给了一个Object有什么不妥吗,不知道这样理解对不对

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
还是,不是很明白!
回复 使用道具 举报
        之所以第三个编译失败是因为:虽然Object是String的父类,但对于泛型来讲,Vector<Object> 却不是Vector<String>的父类,那么Vector<String>的父类是谁呢?是Vector<?>,所以编译失败。
      为什么第四行编译成功?泛型作为JDK1.5的新特性,为了与老代码的兼容,参数化类型与原始类型可以相互引用:
       Vector v1 = new Vector<String>();
       Vector<Object> v = v1;
        咱们不能把它看成称一行,为了兼容所以不报错,但编译器会报警告。  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马