![](/img/trans.png)
[英]Why is Collections.unmodifiableList not defined to return List<? extends T> instead of List<T>?
[英]List extends Collections why?
公共接口列表擴展集合
集合是一個接口,為什么 List 擴展它而不是實現?
在 Java 中:
extends
另一個implements
一個或多個接口extends
另一個接口即,在具有“超級接口”的接口的上下文中,我們使用“擴展”而不是“實現”,因為接口從不實現任何東西。 它擴展了現有的合同。
將interface
視為行為列表。 Animal
可以eat()
和move()
。 每只動物的做法都不一樣,但每一種動物都會這樣做。 所以一個interface
列出了行為,一個class
implements
這些行為(定義了動物如何移動或進食)。 所以class Elephant implements Animal
。 現在可以擴展此行為列表 - 例如,狗可以吠叫。 這就是interface Dog extends Animal
。 你可以創建class Poodle implements Dog
。 本課程將解釋貴賓犬究竟是如何移動、進食和吠叫的。
另外一類可以擴展-這意味着你可以通過exdending它添加主類貴賓犬的行為或越權behavoiur MinaturePoodle
延伸Poodle
。
總結:類可以擴展其他類或實現接口(行為)。 接口(行為)可以由其他接口擴展或由類實現(通過創建方法體)。 http://docs.oracle.com/javase/tutorial/java/IandI/nogrow.html
List
是接口,接口沒有定義范圍(從 java 7 開始,jdk 8 提供了默認方法)。
Collection 的所有常見類型都被概括和總結為collection
接口,這些接口后來專門用於不同的集合,如List
、 Map
或Set
。
collection
List
類型與Set
& Map
相同。 而ArrayList
是List
實現,它也是Collection
類型。
來自文檔
List 接口對迭代器、add、remove、equals 和 hashCode 方法的契約進行了額外的規定,超出了 Collection 接口中指定的規定。 為方便起見,此處還包含了其他繼承方法的聲明
List 是接口,接口沒有定義范圍(從 java 7 開始,jdk 8 提供了默認方法)。
而 ArrayList,LinkedList 是一個類,類實現了接口。
基本層次結構是 List list = new ArrayList<>(); 這里 list 是接口,所以我們不能創建它的對象,但 ArrayList 是一個我們可以使用它的類。
同樣的原則適用於 set,queqe,deque。
MAP 也是一個界面,但它是獨立的。
這里 list extends collection , collection extends iterable 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.