黑马程序员技术交流社区

标题: 从泛型类派生子类答疑有奖 [打印本页]

作者: suiabing    时间: 2012-4-30 01:19
标题: 从泛型类派生子类答疑有奖
当我们创建的父类带有泛型的时候,可以为从该接口派生子类,但是为什么父类不能再包含类型形参呢?
class Zi extends Fu<T>
{
}

编译失败!求高手解答。。。分数次要的,答疑才是重要的


作者: 贾联国    时间: 2012-4-30 02:17
如果子类不指定类型,而父类要指定类型T,那么类型T必须是一个实际类型(例如:String等,不能用符号T表示了),同时子类覆盖的方法参数也变成和父类同样的实际类型,也就是说父类必须有明确的实际参数泛型才能这么写
作者: 张文建    时间: 2012-4-30 09:34
这是我从CSDN找的例子,不知道能不能帮到你
public class TestApple<T>  
{
private T info;

public TestApple(T info){
this.info=info;
}

public void setInfo(T info){
this.info=info;
}
public T getInfo(){
return this.info;
}
public static void main(String[] args)  
{
TestApple<String> ta=new TestApple<String>("aaaaaaa");
System.out.println(ta.getInfo());
TestApple<Double> td=new TestApple<Double>(50.3);
System.out.println(td.getInfo());
}
}
public class A5 extends TestApple// public class A5 extends TestApple<String>而这样会出现编译出错,或者在子类中加一个和父类一样的构造器就可以通过
{
public String getInfo(){
return "子类"+super.getInfo().toString();
}
public static void main(String[] args)  
{
A5 a=new A5("dfgdf");
System.out.println(a.getInfo());
}
}

作者: 隋营营    时间: 2012-4-30 17:03
       等价于:class C <T> {……}
       因此若这样定义class C <Integer>{……} 编译器警告:The type parameter Integer is hiding the type Integer
  2.若这样定义:class C<TypeC> {……}
     则可以写:class B <TypeB> extends C <String> {……} 这里的String是java.lang.String
  3.扩展:可以这样写:
     class C<TypeC> {……}
     class B<TypeB, TypeC> extends C<String> {……}
     class A extends B<Integer, String> {……}

     这里的Integer是java.lang.Integer            String是java.lang.String
老隋看我理解得对吗?







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