gpt4 book ai didi

java - 将priorityQueue转换到我的自定义接口(interface)

转载 作者:行者123 更新时间:2023-12-01 17:19:48 24 4
gpt4 key购买 nike

public class testCast {

public interface dataQueue extends Queue<Object>{};

public static void main (String test[]){
dataQueue queue = (dataQueue) new java.util.PriorityQueue<Object>();
queue.add("Test");
System.out.println(queue.peek());
}
}

我想知道为什么这会导致转换错误......如果我这样做就会起作用

Queue queue = (Queue) new java.util.PriorityQueue<Object>();有谁知道为什么吗??提前致谢

最佳答案

简单地说,因为 PriorityQueueQueue ,但不是 DataQueue 。 Java 中实际的类定义很重要:仅仅因为两个接口(interface)相同并不意味着您可以将一个接口(interface)的任何实现强制转换为另一个接口(interface)。

  • DataQueue是一个扩展 Queue 的接口(interface)接口(interface)。
  • PriorityQueue是一个实现 Queue 的类界面。
    • 没有实现 DataQueue接口(interface)。
  • 因此,PriorityQueue无法转换为 DataQueue .
<小时/>

层次结构可能会更清楚:仅仅因为它们有共同的祖先并不意味着您可以将其中一个转换为另一个。

            Queue
________|________
| |
DataQueue PriorityQueue
<小时/>

为了更加迂腐,让我们提高清晰度,因为 Queue 之间的关系和DataQueueQueue 之间的关系不同和PriorityQueue 。下面的 MSPaint 图表使用实线表示继承,使用虚线表示接口(interface)实现

DataQueue inherits; PriorityQueue implements.

因此,您无法从 PriorityQueue 获取直接发送至DataQueue 。如果您真的想要能够制作PriorityQueue并将其命名为DataQueue由于某种原因,您可以这样做:extend PriorityQueue使用新类,并实现您的 DataQueue界面。

public class MyQueue extends PriorityQueue<Object> implements DataQueue {
// Anything you want goes here, or just leave it empty if you only want the default constructor.
}

MyQueue inherits from PriorityQueue, and implements DataQueue

然后你可以写DataQueue q = new MyQueue();随心所欲。

<小时/>

最后,请注意,如果您尝试从两个不同的类继承,这将不起作用。 Java不支持多重继承。此层次结构之所以可能,是因为 DataQueue是一个接口(interface),而不是一个类。

关于java - 将priorityQueue转换到我的自定义接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19553743/

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