黑马程序员技术交流社区

标题: 关于泛型 [打印本页]

作者: 张雪萍    时间: 2013-4-2 12:40
标题: 关于泛型
本帖最后由 张雪萍 于 2013-4-3 22:04 编辑

  1. interface Inter<T>
  2. {
  3.         void show(T t);
  4. }

  5. /*

  6. class InterImpl implements Inter<String>
  7. {
  8.         public void show(String t)
  9.         {
  10.                 System.out.println("show :"+t);
  11.         }
  12. }

  13. */

  14. class InterImpl<T> implements Inter<T>
  15. {
  16.         public void show(T t)
  17.         {
  18.                 System.out.println("show :"+t);
  19.         }
  20. }
  21. class GenericDemo8
  22. {
  23.         public static void main(String[] args)
  24.         {

  25.                 InterImpl<Integer> i = new InterImpl<Integer>();
  26.                 i.show(4);
  27.                 //InterImpl i = new InterImpl();
  28.                 //i.show("haha");
  29.         }
  30. }
复制代码
关于泛型接口,
这两个类有什么区别吗?
具体怎样运行?
尤其是子类继承父类时,父类的泛型对子类有什么影响?
作者: 我手心里的宝    时间: 2013-4-2 12:53
这两个类都实现了Inter接口
你实现接口的第一个类,是在接口上指定了泛型
类也就也应用跟接口相同的泛型
第二个实现接口的类,是在类上定义泛型
可以是任意类型
而第一个你接口定义了String  所以只能打印String类型的值
作者: 黑马朱超    时间: 2013-4-2 13:12
类没有什么区别,只是在定义子类的时候一个已经明确了对象的类型,一个没有明确。
没有明确的类型如果是<T>会默认是Object类,如果是<T extends E>会默认为E,然后在在建立类的对象或者是定义子类的时候对这默认的类型进行修改。
其实JVM并不知道泛型,所有的泛型在编译阶段就已经被处理成了普通类和方法。
    处理方法很简单,我们叫做类型变量T的擦除(erased) 。
    无论我们如何定义一个泛型类型,相应的都会有一个原始类型被自动提供。原始类型的名字就是擦除类型参数的泛型类型的名字。
         如果泛型类型的类型变量没有限定(<T>) ,那么我们就用Object作为原始类型;
         如果有限定(<T extends XClass>),我们就XClass作为原始类型;
         如果有多个限定(<T extends XClass1&XClass2>),我们就用第一个边界的类型变量XClass1类作为原始类型;

子类继承的话,肯定默认是和父类的类型是一样的。
作者: 周一川    时间: 2013-4-2 19:51
用了泛型了, 那么整个类里都只能接收一个你指定类型  在集合中可以使用, 除此之外不建议这样使用,
作者: 张雪萍    时间: 2013-4-3 08:34
我手心里的宝 发表于 2013-4-2 12:53
这两个类都实现了Inter接口
你实现接口的第一个类,是在接口上指定了泛型
类也就也应用跟接口相同的泛型

谢啦哈。。。
作者: 张雪萍    时间: 2013-4-3 08:35
黑马朱超 发表于 2013-4-2 13:12
类没有什么区别,只是在定义子类的时候一个已经明确了对象的类型,一个没有明确。
没有明确的类型如果是会 ...

谢了哈。。。。
作者: 黄玉昆    时间: 2013-4-3 12:32
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
作者: 黑马朱超    时间: 2013-4-3 18:38
张雪萍 发表于 2013-4-3 08:35
谢了哈。。。。

u are welcome




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