JAVA接口问题?求指导??
JAVA接口里的方法不是抽象的吗,那为什么迭代器也是个接口,可以用Iteratorit=newArraylist.iterator();获取迭代器,然后里面可以直接调用n...
JAVA接口里的方法不是抽象的吗,那为什么迭代器也是个接口,可以用Iterator it=new Arraylist.iterator();获取迭代器,然后里面可以直接调用next方法?
展开
5个回答
展开全部
首先,Iterator 就是接口,也是抽象类,对于你定义一个接口是否是抽象的,其实意义不大(abstract前缀可选),因为接口是用来实现的,主要可以给方便实现类可以任意调用接口的方法,而且无需暴露它的内部表示。后面的Iterator 对象it可以调用Iterator 里面的所有方法!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为AbstracyList中有内部类的方法是
public Iterator iterator() {
return new Itr();
}
所以new ArrayList().iterator 返回的是一个Iterator的类型的变量。
public Iterator iterator() {
return new Itr();
}
所以new ArrayList().iterator 返回的是一个Iterator的类型的变量。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Iterator it=new Arraylist.iterator();迭代器Iterator是个接口,可是在这里是调用了 Arraylist的迭代器,也就是使用了 Arraylist里面对迭代器Iterator的实现方法。比如 List it=new Arraylist();
追问
那这里的iterator 是个内部接口,里面的方法不都是抽象的吗,要实现不是应该子类复写吗,为什么直接调用?
追答
ArrayList这个类里面已经封装了对iterator 这个接口的实现方法了,所以这样写Iterator it=new Arraylist.iterator();调用的是ArrayList对iterator 的实现方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你追中源代码仔细看看,实现iterator()方法的是它的实现类,并不是iterator接口
public Iterator<E> iterator() {
return new Itr();
}
private class Itr implements Iterator<E> {
int cursor = 0;
int lastRet = -1;
...
}
也即是说之后的hasnext和next方法都是这个实现类的方法。
public Iterator<E> iterator() {
return new Itr();
}
private class Itr implements Iterator<E> {
int cursor = 0;
int lastRet = -1;
...
}
也即是说之后的hasnext和next方法都是这个实现类的方法。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是多态,父类应用指向子类对象。List 是接口,定义List list=new ArrayList();我们不是也可以用list.add()嘛。这时候list变量里的地址是指向实现类也就是ArrayList的实例的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询