Java:创建对象时,为什么界面不在右侧?

时间:2012-03-04 04:58:59

标签: java data-structures queue linked-list

java.util.Queue<TreeNode> queue = new java.util.LinkedList<TreeNode>();

LinkedList实现Queue。队列不应该在上面的语句的右侧和左侧的LinkedList吗?

2 个答案:

答案 0 :(得分:2)

该示例将queue声明为对类型为Queue<TreeNode>的对象的引用,但该变量必须引用该接口的具体实现的实例LinkedList<TreeNode>。到coding to the interface,即表示您同意仅使用Queue的方法。这允许您在需要时更改实现,而不更改queue的使用方式。

答案 1 :(得分:1)

在Java中,您可以为相同类型的变量或更一般的类型赋值。在您的示例中,new LinkedList<TreeNode>()是一个值。由于LinkedList 实现了 Queue,因此它比Queue更具体。即,LinkedList Queue

例如,所有这三个都是有效的

Object o = new LinkedList<TreeNode>();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
LinkedList<TreeNode> list = new LinkedList<TreeNode>();

但你不能写任何这些,因为他们的作业不正确。

LinkedList<TreeNode> o = new Object();
LinkedList<TreeNode> queue = new Queue<TreeNode>();

P.S。该示例中的第二个也是无效的,因为Queue是一个接口,并且您无法实例化(new)接口,因为它不是具体类型