黑马程序员技术交流社区

标题: 带泛型方法在子父类中的重载疑问? [打印本页]

作者: 施俊    时间: 2012-4-20 09:53
标题: 带泛型方法在子父类中的重载疑问?
如果在父类中有方法:
public void applyVector(Vector<Number> v){}
在子类中有方法:
public void applyVector(Vector<Integer> v){}
这算不算覆盖呢?
另外在去类型化是在哪个阶段?编译时期还是运行时期?内存中是否有泛型存储的位置?
要是在同一个类中定义了以上两个方法,是不是不能通过呢?

作者: 毕博    时间: 2012-4-20 17:18
泛型在编译时期就已经限定好了,如果传进去什么类型,就固定了。
这两个在一起是会报错的。Method applyVector(Vector<Integer>) has the same erasure applyVector(Vector<E>) as another method in type Demo
等待运行的时候就固定在你之前调用的参数。
作者: 徐鑫    时间: 2012-4-20 19:04
泛型是编译时的,可用以下代码证明,runtime时,泛型不存在了

        ArrayList<String>  list = new ArrayList <String>() ;
        ArrayList <Integer> list2 = new ArrayList <Integer>();
//true;字节码相同,说明泛型是提供给编译器使用的,在runtime时没有泛型
        System.out.println(list.getClass() == list2.getClass());
作者: 岳民喜    时间: 2012-4-20 19:16
反射的例子就能证明,泛型不在并内存中,只存在编译时期,反射可以向定义了泛型的集合中插入其他类型的值




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2