黑马程序员技术交流社区

标题: 关于接口的问题 [打印本页]

作者: xiaoxiaofeng    时间: 2014-8-5 23:09
标题: 关于接口的问题
刚才看了视频,在Java.uil包中有个Iterator接口,而这个接口三个方法,如hasNest(),这个方法明显不是非抽象的,而接口不是只能有抽象的方法吗?这不是矛盾呢吗?
作者: zxdanshui    时间: 2014-8-5 23:24
ArrayList<String> al=new ArrayList<String>();
                al.add("zhagnsan");
                al.add("lisi");
                Iterator<String> it=al.iterator();//创建了一个Iterator类型的对象,有了对象了,当然可以调用方法,子类实现了它的方法。
                while(it.hasNext()){
                        System.out.println(it.next());
作者: xiaoxiaofeng    时间: 2014-8-5 23:39
zxdanshui 发表于 2014-8-5 23:24
ArrayList al=new ArrayList();
                al.add("zhagnsan");
                al.add("lisi");

Iterator 不是接口吗?为什么能建立对象
作者: zxdanshui    时间: 2014-8-6 10:17
xiaoxiaofeng 发表于 2014-8-5 23:39
Iterator 不是接口吗?为什么能建立对象

你看下API,ArrayList它从java.util.AbstractList继承了iterator()方法,重写了它,ArrayList的对象调用iterator方法(返回以恰当顺序在此列表的元素上进行迭代的迭代器), 也就是它的返回值是一个Iterator类型,不是Iterator接口建立的对象。              


简单的说是别人创建了对象,调用了一个方法,返回值是一个Iterator接口类型。
作者: zhxu188    时间: 2014-8-6 10:37
Iterator虽然是接口,但是在集合内部定义了一个内部类实现了这个接口,覆写了接口的方法,并且内部提供了iterator()的方法用于获取这个内部类的对象,返回Iterator类型,这就是多态,父类接口指向子类对象
作者: es2379649    时间: 2014-8-6 10:58
本身是个接口,后来在具体的集合中被实现了,通过获取的方式得到实现类。其实应该是个多态。
作者: xiaoxiaofeng    时间: 2014-8-6 13:08
zhxu188 发表于 2014-8-6 10:37
Iterator虽然是接口,但是在集合内部定义了一个内部类实现了这个接口,覆写了接口的方法,并且内部提供了it ...

正解,当时视频没看完,就有疑问了,看完那集就明白了

作者: liubea    时间: 2014-8-6 13:36
具体的集合会实现Iterator接口,会实现其中的抽象方法




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