Java中的LinkedList是否实现了默认迭代器?

Java中的LinkedList是否实现了默认迭代器?,java,interface,linked-list,iterator,iterable,Java,Interface,Linked List,Iterator,Iterable,我正在研究Java类和继承,我对接口有疑问 LinkedList类根据Oracle文档实现了可序列化、可克隆、可重用、集合、Deque、列表和队列 因为Iterable是一个接口,而不是像LinkedList那样的类,所以它必须实现一个默认迭代器,不是吗? 如果理解正确,我在哪里可以看到实现 因为Iterable是一个接口,而不是像LinkedList那样的类,所以它 必须实现一个默认迭代器,不是吗 不是真的,如果超类重写了方法,那么子类就不必 看看这个: interface IFoo {

我正在研究Java类和继承,我对接口有疑问

LinkedList类根据Oracle文档实现了可序列化、可克隆、可重用、集合、Deque、列表和队列

因为Iterable是一个接口,而不是像LinkedList那样的类,所以它必须实现一个默认迭代器,不是吗? 如果理解正确,我在哪里可以看到实现

因为Iterable是一个接口,而不是像LinkedList那样的类,所以它 必须实现一个默认迭代器,不是吗

不是真的,如果超类重写了方法,那么子类就不必

看看这个:

interface IFoo {
    int getFoo();
}

class A implements IFoo {

    @Override
    public int getFoo() {
        // TODO Auto-generated method stub
        return 0;
    }
}

class B extends A {
    // ...
}
class C extends A implements IFoo {
    // ...
}
注意c类是如何编译的,即使它(冗余地)实现了Ifoo,但没有覆盖getFoo方法(这只可能是因为c扩展了一个)


该类看起来像:

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
 public abstract class AbstractCollection<E> implements Collection<E> {
公共类链接列表
扩展抽象顺序列表
实现List、Deque、Cloneable、java.io.Serializable
{
所以在类层次结构中

其中AbstractCollection看起来像:

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
 public abstract class AbstractCollection<E> implements Collection<E> {
公共抽象类AbstractCollection实现集合{
因此,它们确实覆盖了
interface Iterable

因为Iterable是一个接口,而不是像LinkedList那样的类,所以它 必须实现一个默认迭代器,不是吗

不是真的,如果超类重写了方法,那么子类就不必

看看这个:

interface IFoo {
    int getFoo();
}

class A implements IFoo {

    @Override
    public int getFoo() {
        // TODO Auto-generated method stub
        return 0;
    }
}

class B extends A {
    // ...
}
class C extends A implements IFoo {
    // ...
}
注意c类是如何编译的,即使它(冗余地)实现了Ifoo,但没有覆盖getFoo方法(这只可能是因为c扩展了一个)


该类看起来像:

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
 public abstract class AbstractCollection<E> implements Collection<E> {
公共类链接列表
扩展抽象顺序列表
实现List、Deque、Cloneable、java.io.Serializable
{
所以在类层次结构中

其中AbstractCollection看起来像:

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
 public abstract class AbstractCollection<E> implements Collection<E> {
公共抽象类AbstractCollection实现集合{

因此,它们确实覆盖了链接列表类本身中的Iterable接口方法。

您将在链接列表类本身中找到Iterable接口方法的实现。

您将在链接列表类本身中找到Iterable接口方法的实现。

简而言之,在源代码中

较长的答案是
LinkedList
本身不需要实现
迭代器()
方法,如果它继承自另一个可能实现它的类。如果仔细查看,可以看到LinkedList没有定义
迭代器()
method,但当您实现
Iterable
时,它应该在那里。查看结尾部分,您还可以看到继承的方法部分。具体查看“从类java.util.AbstractSequentialList继承的方法”,其中列出了
iterator()

现在我们已经确定,
iterator
实际上在
java.util.AbstractSequentialList
中。因此,要找到实现,您可以查看
AbstractSequentialList

public Iterator<E> iterator() {
    return listIterator();
}
现在,在
LinkedList
类中实现了
listIterator(int)
方法

 public ListIterator<E>  [More ...] listIterator(int index) {
     checkPositionIndex(index);
     return new ListItr(index);
 }
publicListIterator[More…]ListIterator(int索引){
检查位置索引(索引);
返回新的ListItr(索引);
}

如果您需要进一步分析is的功能,可以从那里继续。

简短的回答是,在源代码中

较长的答案是
LinkedList
本身不需要实现
迭代器()
方法,如果它继承自另一个可能实现它的类。如果仔细查看,可以看到LinkedList没有定义
迭代器()
method,但当您实现
Iterable
时,它应该在那里。查看结尾部分,您还可以看到继承的方法部分。具体查看“从类java.util.AbstractSequentialList继承的方法”,其中列出了
iterator()

现在我们已经确定,
iterator
实际上在
java.util.AbstractSequentialList
中。因此,要找到实现,您可以查看
AbstractSequentialList

public Iterator<E> iterator() {
    return listIterator();
}
现在,在
LinkedList
类中实现了
listIterator(int)
方法

 public ListIterator<E>  [More ...] listIterator(int index) {
     checkPositionIndex(index);
     return new ListItr(index);
 }
publicListIterator[More…]ListIterator(int索引){
检查位置索引(索引);
返回新的ListItr(索引);
}

如果您需要进一步分析is的功能,您可以从那里继续。

因此LinkedList类扩展了AbstractSequentialList类。该类具有称为迭代器的方法。由于LinkedList扩展了AbstractSequentialList类,我们可以使用迭代器方法

public abstract class AbstractSequentialList<E>
extends AbstractList<E>{
  public Iterator<E> iterator(){
    //implementation
 }
}
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, Serializable{
}
公共抽象类AbstractSequentialList
扩展抽象列表{
公共迭代器迭代器(){
//实施
}
}
现在LinkedList类扩展了AbstractSequentialList类。因此,通过创建LinkedList类的对象,我们可以使用迭代器方法

public abstract class AbstractSequentialList<E>
extends AbstractList<E>{
  public Iterator<E> iterator(){
    //implementation
 }
}
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, Serializable{
}
公共类链接列表
扩展抽象顺序列表
实现List、Deque、Cloneable、Serializable{
}

因此LinkedList类扩展了AbstractSequentialList类。该类具有称为迭代器的方法。由于LinkedList扩展了AbstractSequentialList类,我们可以使用迭代器方法

public abstract class AbstractSequentialList<E>
extends AbstractList<E>{
  public Iterator<E> iterator(){
    //implementation
 }
}
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, Serializable{
}
公共抽象类AbstractSequentialList
扩展抽象列表{
公共迭代器迭代器(){
//实施
}
}
现在LinkedList类扩展了AbstractSequentialList类。因此,通过创建LinkedList类的对象,我们可以使用迭代器方法

public abstract class AbstractSequentialList<E>
extends AbstractList<E>{
  public Iterator<E> iterator(){
    //implementation
 }
}
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, Serializable{
}
公共类链接列表
扩展抽象顺序列表
实现List、Deque、Cloneable、Serializable{
}
可以,但是