泛型中extends和super的區別詳解

2022-09-23 15:51:07 字數 1483 閱讀 2905

首先來說:< extends t > 叫 上界萬用字元

< super t >叫 下界萬用字元

1. 下面用**來說明上界萬用字元的一些特點

public class fruit

public class apple extends fruit

public class banana extends fruit

public class plate

public t getitem()

public void setitem(t item)

}//下面為測試**

plate plate = new plate(new apple());

object item3 = plate.getitem();

fruit item = plate.getitem();

apple item2 = plate.getitem();//error

plate.setitem(new apple());//error

plate.setitem(new banana());//error1). plate< extends fruit >編譯器只知道容器內是存放的fruit或者它的子類,但是並不知道是apple還是banana,只能知道上限是fruit。

所以apple item2 = plate.getitem();//error

2).原因是編譯器只知道容器內是fruit或者它的派生類,但具體是什麼型別不知道。可能是fruit?可能是apple?也可能是banana,編譯器在看到後面用plate賦值以後,盤子裡沒有被標上有「蘋果」。而是標上乙個佔位符:cap#1,來表示捕獲乙個fruit或fruit的子類,具體是什麼類不知道,代號cap#1。然後無論是想往裡插入apple或者banana或者fruit編譯器都不知道能不能和這個cap#1匹配,所以就都不允許。

所以:plate.setitem(new apple());//error

plate.setitem(new banana());//error

2 說明下界萬用字元的特點

plate plate2 = new plate(new fruit());

//取資料

object object = plate2.getitem();

fruit fruit = plate2.getitem();//error

//存資料

plate2.setitem(new apple());

plate2.setitem(new banana());

plate2.setitem(new fruit());因為下界規定了元素的最小粒度的下限,實際上是放鬆了容器元素的型別控制.元素的下界為fruit,那麼存資料的時候,可以存fruit的子類。但是注意:取資料時只有object才能裝下,這樣做會使資料型別的資訊丟失。

3.pecs(product extends customer super)

經常取資料時 用上界萬用字元

經常存資料時 用下界萬用字元

泛型的extends和super萬用字元

首先定義乙個類 class user public user t t1,t t2 public t gett1 public void sett1 t t1 public t gett2 public void sett2 t t2 有乙個add 方法,引數型別為user public static...

Java泛型萬用字元extends與super

static class food static class fruit extends food complie error flist.add new fruit flist.add new object flist.add null only work for nullfruit fruit ...

Java泛型萬用字元extends與super

static class food static class fruit extends food complie error flist.add new fruit flist.add new object flist.add null only work for nullfruit fruit ...