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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 施俊 中级黑马   /  2012-4-20 09:53  /  2326 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果在父类中有方法:
public void applyVector(Vector<Number> v){}
在子类中有方法:
public void applyVector(Vector<Integer> v){}
这算不算覆盖呢?
另外在去类型化是在哪个阶段?编译时期还是运行时期?内存中是否有泛型存储的位置?
要是在同一个类中定义了以上两个方法,是不是不能通过呢?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 泛型是编译时期的

查看全部评分

3 个回复

倒序浏览
泛型在编译时期就已经限定好了,如果传进去什么类型,就固定了。
这两个在一起是会报错的。Method applyVector(Vector<Integer>) has the same erasure applyVector(Vector<E>) as another method in type Demo
等待运行的时候就固定在你之前调用的参数。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
泛型是编译时的,可用以下代码证明,runtime时,泛型不存在了

        ArrayList<String>  list = new ArrayList <String>() ;
        ArrayList <Integer> list2 = new ArrayList <Integer>();
//true;字节码相同,说明泛型是提供给编译器使用的,在runtime时没有泛型
        System.out.println(list.getClass() == list2.getClass());

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
反射的例子就能证明,泛型不在并内存中,只存在编译时期,反射可以向定义了泛型的集合中插入其他类型的值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马