You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AbstractList未实现Iterator接口为何能返回Iterator实例?

解答你的疑问

首先得澄清一个关键误解:方法返回某个接口类型的对象,完全不需要当前类去实现这个接口——只需要返回一个已经实现了该接口的类的实例就行。

具体到AbstractList的情况:

  • AbstractList的iterator()方法内部,其实是返回了它的一个内部类Itr的实例,这个Itr类是明确实现了Iterator接口的(你可以查看JDK源码,AbstractList里有个private class Itr implements Iterator<E>的实现)。
  • 你看到AbstractList本身没写implements Iterator,但这不影响它返回Iterator类型的对象,因为真正实现Iterator接口的是它内部的Itr类,iterator()方法只是把这个内部类的实例返回出去而已。

举个简单的类比例子帮你理解:假设我们有个接口Animal,然后有个类Dog implements Animal,另一个类Person不需要实现Animal,但它可以有个方法getPet()返回Animal类型——只要在方法里new一个Dog返回就行:

public interface Animal {}
public class Dog implements Animal {}
public class Person {
    public Animal getPet() {
        return new Dog(); // Dog实现了Animal,所以可以合法返回
    }
}

AbstractList的iterator()方法就是这个逻辑,它本身不用实现Iterator,只要返回一个实现了Iterator的对象就行,而它内部的Itr正好承担了这个实现的角色。

另外你提到Iterator不是函数式接口,这点没错,所以没法直接用Lambda实现,但AbstractList用的是内部类实现的方式,这是Java里完全合法的接口实现手段——内部类可以独立实现接口,外部类只需要返回该内部类的实例即可,完全符合语法要求。

内容的提问来源于stack exchange,提问作者Anand Pandey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:39:54