从 Stream 调用的 close() 方法如何指向 AbstractPipeline 抽象类中的 close() 方法的实现?

sta*_*low 6 java oop stream java-stream

我刚开始学习 Java Streams,我有一个问题。让我很困惑的事情如下:

  1. 我刚刚检查了 AutoCloseable 接口,它包含 close() 方法。

  2. BaseStream 接口扩展了 AutoCloseable 接口,并提供了继承规则,这意味着可以从 BaseStream 接口使用 close() 方法。

  3. Stream 接口扩展了 BaseStream 接口,并提供了继承规则,这意味着可以从 Stream 接口使用 close() 方法。

  4. 此外,抽象类 AbstractPipeline 实现了 BaseStream 接口,并提供了 close() 方法的实现。

这是前面描述的

List<String> stringList = new ArrayList<>();
Stream<String> stringStream = stringList.stream();
stringStream.close();
Run Code Online (Sandbox Code Playgroud)

当我按住 Ctrl 键盘按钮并单击鼠标左键时,它指向 BaseStream 接口中 close() 方法的抽象,但是当我按下 Ctrl+Alt+B 时,它指向我中方法的实现AbstractPipeline 抽象类。

问题是:

当 Stream 和 AbstractPipeline 不交互并且它们的主要连接是 BaseStream 时,Stream 调用的 close() 方法如何将我指向 AbstractPipeline 抽象类中的 close() 方法的实现?

这是某种我不知道的面向对象的概念吗?

谢谢你。

更新:

我正在使用 IntelliJ IDEA 2020.1.2(终极版)和 JDK 1.8,但我也尝试过使用 JDK 14 和 Eclipse IDE for Enterprise Java Developers 版本 2019-06 (4.12.0),结果是一样的。

sta*_*low 1

有一个抽象类ReferencePipeline,它扩展了抽象类AbstractPipeline并实现了Stream,但没有重写close()方法。这个抽象类是我一直在寻找的联系和答案。现在,一切看起来都很合理,对我来说也很清楚。这是完整的图表,它清楚了这个问题的答案。

在此输入图像描述

感谢所有参与并帮助我找到答案的人。干杯!