java.util.Queue<TreeNode> queue = new java.util.LinkedList<TreeNode>();
LinkedList实现Queue。队列不应该在上面的语句的右侧和左侧的LinkedList吗?
答案 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
)接口,因为它不是具体类型