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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiaoxiaofeng 中级黑马   /  2014-8-5 23:09  /  1300 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚才看了视频,在Java.uil包中有个Iterator接口,而这个接口三个方法,如hasNest(),这个方法明显不是非抽象的,而接口不是只能有抽象的方法吗?这不是矛盾呢吗?

7 个回复

倒序浏览
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());
回复 使用道具 举报
zxdanshui 发表于 2014-8-5 23:24
ArrayList al=new ArrayList();
                al.add("zhagnsan");
                al.add("lisi");

Iterator 不是接口吗?为什么能建立对象
回复 使用道具 举报
xiaoxiaofeng 发表于 2014-8-5 23:39
Iterator 不是接口吗?为什么能建立对象

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


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

正解,当时视频没看完,就有疑问了,看完那集就明白了
回复 使用道具 举报
具体的集合会实现Iterator接口,会实现其中的抽象方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马