黑马程序员技术交流社区

标题: 泛型接口细节问题 [打印本页]

作者: 王红霞    时间: 2012-7-18 22:12
标题: 泛型接口细节问题
本帖最后由 王红霞 于 2012-7-19 14:27 编辑

interface Inter<T>
{
        void show(T t);
}

class InterImpl implements Inter<String>
{
        public void show(String t)
        {
                System.out.println(t);
        }
}

class InterImpl<T> implements Inter<T>//为什么会出现红色部分的差别?是什么意思?
{
        public void show(T t)
        {
                System.out.println(t);
        }
}
class  GenericDemo
{
        public static void main(String[] args)
        {
                InterImpl i=new InterImpl();
                i.show("hh");


                InterImpl<Integer> i=new InterImpl<Integer>();
                i.show();

        }
}

作者: 袁錦泰    时间: 2012-7-19 00:14
我感觉接口本身就不应该明确具体的数据类型,写个泛型参数代表类可以操作任意数据类型,也就是将泛型做到抽象,与接口遥相呼应.
你定义的接口时泛型无法确定就写个参数表示,你实现这个接口以后依然无法确定到底类要统一对什么数据类型进行操作,所以你随之可以为你的实现类加个泛型参数,这时你要注意从父类到子类再到子类的实现方法中传入的参数的泛型都必须是相同的泛型参数,,这东西逻辑性不是狠强呀,应该狠容易理解吧.
就说这么多,如果还没理解就直接M我吧.
作者: 王红霞    时间: 2012-7-19 08:41
袁錦泰 发表于 2012-7-19 00:14
我感觉接口本身就不应该明确具体的数据类型,写个泛型参数代表类可以操作任意数据类型,也就是将泛型做到抽象 ...

我只是不懂在 是具体数据类型和不是具体数据类型的差别  为什么有  在InterImpl后有没有<T>  的区别?

未命名.jpg (2.92 KB, 下载次数: 67)

未命名.jpg

未命名1.jpg (3.8 KB, 下载次数: 73)

未命名1.jpg

作者: 黄丽慧    时间: 2012-7-19 09:25
其实用不用泛型都可以的,之所以在InterImpl后面加上<T> 是为了更好地进行控制。
InterImpl<Integer> i=new InterImpl<Integer>();你看到没有,这里在创建对象的时候就将 i 限定为integer类型的,那么在对 i 进行调用的时候就可以避免需要进行转型的麻烦。比如说:
我们定义一个类:class InterImpl implements Inter
{
        public void show(String t)
        {
                System.out.println(t);
        }
}
InterImpl i=new InterImpl();
int t=3;
i.show(t);//这时就会报错,因为InterImpl类中的show方法只能传入一个String类型的。可是我们可以看到其接口Inter是一个泛型,应该是可以接收任何数据才对啊。所以我们需要对InterImpl类向上转型,才能调用其父类方法。
相比之下,使用泛型类就方便很多了。

作者: 袁錦泰    时间: 2012-7-19 13:45
王红霞 发表于 2012-7-19 08:41
我只是不懂在 是具体数据类型和不是具体数据类型的差别  为什么有  在InterImpl后有没有  的区别? ...

接口使用的数据类型不确定,实现类使用的数据类型依然不确定,就可以这样去写了.你在使用这个接口实现类的时候可以随意对任意类型数据进行操作.




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