2013-07-07 97 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

不同之處在於,首先,您正在編寫一個接口,從而爲您提供更多的實施靈活性。在這個例子中,這可能並不重要,但是當您創建具有許多相關類的複雜程序並且需要簡化連接並允許在獨立於其他模塊的情況下升級或增強一個模塊的能力時,這將更重要。