黑马程序员技术交流社区

标题: 泛型类的子类对象问题 [打印本页]

作者: 涂金哲    时间: 2012-7-31 17:36
标题: 泛型类的子类对象问题
class A<T>{
    T t;
    A(T o){
        t=o;
    }
}
class B<T> extends A<T>{

    B(T o) {
        super(o);
    }
}
class Test{
        //B b=new B();    //此类型的创建会出错 即使
        B<String> b=new B<String>("hah");
    }
B类的泛型类型传递给A类,如果B类的对象不需要定义泛型 ,我们应该怎么办?
为什么不能创建不带泛型的B类的对象?


作者: 陈红建    时间: 2012-7-31 18:06
我是来围观的  对于泛型 我就记住了  数据类型的 限定 其他的 我也是稀里糊涂 管他那么多呢  只要能用就行嘛  哈哈
作者: 涂金哲    时间: 2012-7-31 18:21
陈红建 发表于 2012-7-31 18:06
我是来围观的  对于泛型 我就记住了  数据类型的 限定 其他的 我也是稀里糊涂 管他那么多呢  只要能用就行 ...

这是一个泛型类的超类  我也不明白
作者: 徐然    时间: 2012-7-31 20:49
额~~~你这个不能创建不带泛型的对象不成功
原因不在泛型的问题上
你这样写肯定能创建成功 B b=new B("hah");
因为你没有空参数的构造函数
B b=new B();这样写自然会出错
作者: 涂金哲    时间: 2012-8-1 11:52
徐然 发表于 2012-7-31 20:49
额~~~你这个不能创建不带泛型的对象不成功
原因不在泛型的问题上
你这样写肯定能创建成功 B b=new B("hah") ...

不会吧,我觉得问题应该出在子类是否一定要加上泛型,应为创建子类对象父类的构造器肯定要去初始化,而父类初始化用到了泛型,子类在创建的时候必须得带上吧,我不知道这样理解对不对,请指教
作者: 王渠    时间: 2012-8-1 11:58
我也觉得是构造函数的错误,你这个构造函数上错了。没有默认的构造函数。
class A<T>{
    T t;
    A(T o){
        t=o;
    }
}
class B<T> extends A<T>{

    B(){
       super(o);
    }
    B(T o) {
        
    }
}
class Test{
        //B b=new B();    //此类型的创建会出错 即使
        B<String> b=new B<String>("hah");
    }


作者: 杨康    时间: 2012-8-1 14:03
B b=new B();   
没有空参数的构造函数,这样定义编译不会通过
作者: 徐然    时间: 2012-8-1 14:25
涂金哲 发表于 2012-8-1 11:52
不会吧,我觉得问题应该出在子类是否一定要加上泛型,应为创建子类对象父类的构造器肯定要去初始化,而父类 ...

其实,你这种用构造方法进行泛型类型传递,限定的只是构造函数的参数类型必须与对象泛型类型一致
你在告诉构造函数,对象必须有一个任意类型参数
另外,泛型是作用于编译时期的,编译器只是会检查你的对象与类的泛型是否一致,如果对象没有写泛型,他就不知道你要用什么类型,他会提示你类上有泛型,如果对象没有,可能会有安全隐患,但并不阻止你编译通过,如果有泛型类型,则可以是任意类型.
其实API中有很多这种例子,比如ArrayList,它的类中就有任意类型泛型,但是你在创建实例对象的时候不加泛型也一样通过编译.
但是你一旦给类上确定了泛型的实际参数类型,那么你创建对象时要么不加泛型,要加就必须跟类的一致
所以创建对象时是可以不加泛型的.
可能说得有点乱,不知道能不能帮助你理解
作者: 涂金哲    时间: 2012-8-2 09:38
王渠 发表于 2012-8-1 11:58
我也觉得是构造函数的错误,你这个构造函数上错了。没有默认的构造函数。

...

sorry 拷贝错了 B b=new B("hah") …明白了
作者: 涂金哲    时间: 2012-8-2 09:38
王渠 发表于 2012-8-1 11:58
我也觉得是构造函数的错误,你这个构造函数上错了。没有默认的构造函数。

...

sorry 拷贝错了 B b=new B("hah") …明白了




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