由于刚学java,对于java API中接口中的方法可以直接使用感到非常好奇,比如上面public interface Iterator<E> 是抽象的,但我可以使用boolean hasNext();
它是在哪里实现的,我怎么可以通过 Iterator对象来使用它。它背后的实现机制是什么?还是我根本就理解错了?
求大神指点!!!
它是在哪里实现的,我怎么可以通过 Iterator对象来使用它。它背后的实现机制是什么?还是我根本就理解错了?
求大神指点!!!
解决方案 »
- 如何在jtable里进行查询定位
- 求一条关于日期的SQL语句
- 在java 程序中调用xml文件出现的问题
- 请高手帮忙?
- 怎样在simpledateformat中的format与oracle中date型的format之间进行转换?
- 数据转发的实现,请高人看一下这样做能实现吗,
- JAVA中的paint()函数是不是相当于windows中的窗口函数?
- 关于CSSC的解析
- 两个Java文件在一个JVM中,可否访问同一个动态链接库?
- 新手用jbuilder,很简单的问题。
- java.net.SocketException: Bad address: connect错误啥原因?
- 关于ajax请求spring mvc返回的json被转义的问题
你看下API就会发现ArrayList实现了Iterable, 而Iterable有个方法:
Iterator<T> iterator()
返回一个在一组 T 类型的元素上进行迭代的迭代器。既然如此,a.Iterator是不是返回了一个实现了Iterator接口对象呢?
而ArrayList的父类是AbstractList,你打开此类的iterator方法,就可以看到一个new Itr()的语句,然后点击这个Itr,你就会发现
private class Itr implements Iterator<E> 是不是清楚了?
Iterator it = list.iterator();
System.out.println(it.getClass());
getClass() 返回的是一个对象运行时的类型
输出的结果是 ArrayList$Itr
所以 it 实际上的类型是 ArrayList$Itr,而不是 Iterator
接口不能用来创建实例,但是可以用来声明变量
之所以用 Iterator 来声明变量,是因为我们通常不知道调用 iterator() 方法后得到的是什么类型的迭代器,而 Iterator 是所有
迭代器的父类,所以就需要使用 Iterator 来声明变量就像 Object 是所有类的父类一样Object obj = new String("爱问人家的人");
Object obj = new Integer(5);这样写都是没有问题的
楼主多看看接口和abstract类,看看接口定义的好处
设计模式中,大量应用了接口的定义,spring也是面向接口的编程,易于更改具体的实现。
所以当list.add(new Object())的时候,其实用的是 ArrayList里面的add方法。