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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© suiabing 中级黑马   /  2012-4-30 01:19  /  3546 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当我们创建的父类带有泛型的时候,可以为从该接口派生子类,但是为什么父类不能再包含类型形参呢?
class Zi extends Fu<T>
{
}

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

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

3 个回复

倒序浏览
如果子类不指定类型,而父类要指定类型T,那么类型T必须是一个实际类型(例如:String等,不能用符号T表示了),同时子类覆盖的方法参数也变成和父类同样的实际类型,也就是说父类必须有明确的实际参数泛型才能这么写

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
这是我从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());
}
}
回复 使用道具 举报
  • class C  <String> {……} 若这样定义类C,则String只代表泛型参数,并不是java.lang.String
       等价于: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
老隋看我理解得对吗?


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马