根據Java多態性功能 可以將您的子類對象分配給父類的引用類型。 這裏是將子類分配給ParentClass類型的引用。
這就是爲什麼它的工作
嗨,
[這](What is PECS (Producer Extends Consumer Super)?)應該真正幫助你理解。有一條規則叫做PECS。生產者延伸和消費者超級。這條規則應該包含在通配符的Java教程中,因爲如果沒有這個,對Bounded通配符的理解對我來說似乎就不完整了。
這基本上意味着,如果你只想從列表中讀(寫不進的話),然後用
List<? extends ParentClass>
它表明你會得到哪些是父類或父類的亞型的對象。此外,暗示列表處於只讀模式。
如果你想「把」到沒有讀取列表,然後通過聲明您的列表,
List<? Super ParentClass>
您可以添加或者是父類或它的類型的類型。但沒有別的可以插嘴說。
而且,寫了下面的代碼,並
1 List<? super ChildClass > list1 = new ArrayList<ChildClass>();
2 list1.add(new GrandChildAbstract());
3 list1.add(new ChildClass());
4 list1.add(new Abstractclass());
5
6 ChildClass ch= list1.get(0);
7 Abstractclass ch = list1.get(0);
8
9 List<? extends ChildClass> list2 = new ArrayList<ChildClass>();
10 list2.add(new GrandChildAbstract());
11 list2.add(new ChildClass());
12 list2.add(new Abstractclass());
,且Eclipse編譯的時候出錯了線#4,6,7日和10,11,12 這清楚地表明必須在只讀和只寫上下文的背景下理解超級綁定通配符。
它是完全有效的按多態。 list1是父類的列表,它可以容納子對象。然而,在相反的情況下它是無效的情況。 – 2014-09-05 19:55:58
謝謝大家,我現在明白了(: – 2014-09-05 20:03:11
做了一些更多的研究並更新了我的答案.PECS規則值得理解。 – DolphinJava 2014-09-05 20:41:56