gpt4 book ai didi

java - 为什么可以转换为抽象类

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:21 24 4
gpt4 key购买 nike

我正在读一本关于 java 中数据结构的书,现在正在谈论迭代器。我看到了以下代码,对我来说似乎很奇怪。在以下代码中,AbstractIterator是实现 Iterator<E> 的抽象类, UniqueFilterAbstractIterator 的子类那不是抽象的,并且data是一个 vector 。我想我不明白如何在第一行中获取 Vector.iterator() 方法的输出并将其转换为抽象类。在第 1 行之后,是 dataIterator不是抽象类的实例化实例?

AbstractIterator<String> dataIterator =
(AbstractIterator<String>)data.iterator();
AbstractIterator<String> ui = new UniqueFilter(dataIterator);

最佳答案

问题是我们正在谈论两种不同的类型。对象的(运行时)类型和引用的(编译时)类型。

  1. dataIterator是抽象类型的引用 - 没关系。
  2. data.iterator()返回对其类型在示例中不明确的对象的引用,但显然它是继承自 AbstractIterator<String> 的具体类型-没关系
  3. 如果 B 是 A 的子对象,您始终可以将对类型 B 的对象的引用分配给对类型 A 的对象的引用,即使 A 是抽象(或接口(interface))也是如此。你实际上不需要类型转换。

所以在第一行之后 dataIterator仍然是 AbstractIterator<String> 类型的引用, 但它是对实现 AbstractIterator<String> 的具体类型对象的引用.

请记住,在 JAVA 中,所有对象变量实际上都是引用。

UniqueFilter顺便说一句,与这个问题无关。

关于java - 为什么可以转换为抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6319656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com