首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将priorityQueue转换到我的自定义界面

将priorityQueue转换到我的自定义界面
EN

Stack Overflow用户
提问于 2013-10-23 22:48:16
回答 1查看 59关注 0票数 0
代码语言:javascript
运行
复制
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>();,有人知道为什么吗??提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-23 22:54:49

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

  • DataQueue是一个扩展Queue接口的接口。
  • PriorityQueue是一个实现Queue接口的类。
    • 实现DataQueue接口。

  • 因此,不能将PriorityQueue转换为DataQueue

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

代码语言:javascript
运行
复制
            Queue
      ________|________
     |                 |
 DataQueue       PriorityQueue

为了更好地理解这一点,让我们来提高一下清晰度,因为QueueDataQueue之间的关系不同于QueuePriorityQueue之间的关系。下面的MSPaint图使用实线表示继承,而虚线用于接口实现

因此,您不能直接从PriorityQueue获得DataQueue。如果您确实出于某种原因想要创建一个PriorityQueue并将其称为DataQueue,那么您可以这样做:用一个新类扩展PriorityQueue,并实现您的DataQueue接口。

代码语言:javascript
运行
复制
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.
}

然后你就可以把DataQueue q = new MyQueue();写得心满意足了。

最后,请注意,如果您试图从两个不同的类继承,这是行不通的。Java不支持多重继承。这种层次结构之所以可能,是因为DataQueue是一个接口,而不是一个类。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19553743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档