2017-3-15
接口:
當(dāng)我們?cè)诔绦蛟O(shè)計(jì)的時(shí)候,基類(lèi)中的所有方法都不用去實(shí)現(xiàn),就可以使用接口來(lái)代替類(lèi),提高延展性。
格式:interface接口名{
方法的聲明:不需要public和其他修飾符,默認(rèn)是public
};
接口只能被實(shí)現(xiàn),不能實(shí)例化。
當(dāng)類(lèi)實(shí)現(xiàn)接口時(shí),必須將接口當(dāng)中所有的方法全部實(shí)現(xiàn)。
實(shí)現(xiàn)的方法必須加修飾符public
接口可以多實(shí)現(xiàn),在一定程度上彌補(bǔ)了類(lèi)不能多繼承的缺陷,實(shí)現(xiàn)多個(gè)接口,接口之間使用逗號(hào)隔開(kāi)。
類(lèi)B實(shí)現(xiàn)接口A,類(lèi)B派生出類(lèi)C,此時(shí)類(lèi)C可以不實(shí)現(xiàn)接口A,因?yàn)樗幕?lèi)B已經(jīng)做了實(shí)現(xiàn)。
抽象類(lèi)一樣可以實(shí)現(xiàn)接口,當(dāng)接口中的方法在抽象類(lèi)中:
-不是抽象方法的時(shí)候就必須要實(shí)現(xiàn)
-當(dāng)使用關(guān)鍵字abstract修飾方法的時(shí)候可以不實(shí)現(xiàn),讓繼承抽象類(lèi)的派生類(lèi)來(lái)實(shí)現(xiàn)
接口之間也可以繼承:
例:接口A繼承于接口B,類(lèi)C如果實(shí)現(xiàn)了A就必須將接口A和接口B里面所有的方法都實(shí)現(xiàn)。
泛型
使用泛型類(lèi)型可以最大限度的重用代碼,保護(hù)類(lèi)型的安全和提高性能
降低了強(qiáng)制轉(zhuǎn)換或裝箱操作的成本或風(fēng)險(xiǎn)
可以對(duì)泛型類(lèi)進(jìn)行約束以訪問(wèn)特定數(shù)據(jù)類(lèi)型的方法
裝箱:值類(lèi)型包裝成引用類(lèi)型的過(guò)程,稱(chēng)之為裝箱。
拆箱:將引用類(lèi)型轉(zhuǎn)換為值類(lèi)型的過(guò)程稱(chēng)之為拆箱。拆箱將對(duì)對(duì)象強(qiáng)制轉(zhuǎn)換為原來(lái)的類(lèi)型,將前面的對(duì)象進(jìn)行拆箱。
泛型方法:當(dāng)方法當(dāng)中參數(shù)類(lèi)型不確定的時(shí)候就使用泛型方法
修飾符 返回值類(lèi)型 方法名 <T>?(參數(shù)列表){};
T也可以用其他字母代替,習(xí)慣性將泛型類(lèi)型寫(xiě)成T
泛型方法調(diào)用:方法名 (實(shí)參)
注意:泛型具體類(lèi)型可以不指明,但一定要與實(shí)參的類(lèi)型對(duì)應(yīng)
泛型類(lèi):
格式:class+類(lèi)名+<泛型> {};
實(shí)例化:類(lèi)名+<具體類(lèi)型>對(duì)象名= new類(lèi)名<具體類(lèi)型>();
運(yùn)算符:+ - * /不能用在泛型類(lèi)型
泛型參數(shù)的限定:使用where關(guān)鍵字
1.where T:struct ?-表示泛型T是值類(lèi)型
2.Where T:class ?-表示泛型T是引用類(lèi)型
3.Where T:new() 表示泛型具有一個(gè)無(wú)參數(shù)的構(gòu)造方法
意思就是傳進(jìn)來(lái)的這個(gè)類(lèi)必須要有默認(rèn)構(gòu)造
如果有多個(gè)限制,new()必須放在最后
4.where T:類(lèi)名Name ?表示這個(gè)泛型是Name的本類(lèi)或派生類(lèi)
5.Where T:接口名InterfaceName ?表示泛型是實(shí)現(xiàn)了接口InterfaceName的類(lèi)型
6.多個(gè)泛型的泛型限定
Public class Student<T,M>
Where T:InterfaceName
Where M:class{}
在定義泛型類(lèi)時(shí),可以對(duì)客戶(hù)端代碼能夠在實(shí)例化類(lèi)時(shí)用于類(lèi)型參數(shù)的類(lèi)型種類(lèi)施加限制。如果客戶(hù)端代碼嘗試用某個(gè)約束所不允許的類(lèi)型來(lái)實(shí)例化類(lèi),則會(huì)產(chǎn)生編譯時(shí)的錯(cuò)誤,這些限制稱(chēng)為約束。約束是使用where上下文關(guān)鍵字指定的。
泛型類(lèi)封裝不是特定于具體數(shù)據(jù)類(lèi)型的操作。泛型類(lèi)最常用于集合。像從集合中添加和移除項(xiàng)這樣的操作都以大體上相同的方式執(zhí)行,與所存儲(chǔ)的數(shù)據(jù)類(lèi)型無(wú)關(guān)。