2013-07-07 101 views
0

菜鸟的Java问题:Queue q = new LinkedList和LinkedList q = new LinkedList之间的区别?

有人能解释

1. Queue<Integer> q = new LinkedList<Integer>() and 
2. LinkedList<Integer> q = new LinkedList<Integer>() 
在Java中

之间的区别?我假定在声明1中,我不能使用LinkedList特定的方法,只能使用Queue接口描述的方法。然而,我只是尝试过q.size(),发现它起作用,尽管这不是Queue接口的一部分。

将这些对象作为参数传递的区别?有什么不同?

回答

2

Queue implements Collection,其具有size()方法。

正如您所指出的,这两个声明的区别在于有限的可用方法和允许的更多实现类型 - 例如 - 方法参数。

+0

好的。所以我最初的怀疑是正确的,我只能访问Queue方法,而不是例1中特定于LinkedList的方法?我通常在例子中看到这样做。这里的主要优点是多态吗?所以我可以有一个Queue数组,或者将它作为Queue等传递给方法?任何其他具体原因,这是一个很好的做法? –

+0

是的,没错。 – luke657

+0

如果 - 例如 - 你有一个方法需要'Queue'作为参数,那么你就可以用'PriorityQueue','LinkedList'等来调用这个方法。它允许更多的抽象代码和对你的实现的改变而不会打破另一种方法的合同。 –

1

这是因为Queue接口实现了具有size()方法的Collection接口。

0

不同之处在于,首先,您正在编写一个接口,从而为您提供更多的实施灵活性。在这个例子中,这可能并不重要,但是当您创建具有许多相关类的复杂程序并且需要简化连接并允许在独立于其他模块的情况下升级或增强一个模块的能力时,这将更重要。