播客java基礎(chǔ)班面向?qū)ο骭第1頁
播客java基礎(chǔ)班面向?qū)ο骭第2頁
播客java基礎(chǔ)班面向?qū)ο骭第3頁
播客java基礎(chǔ)班面向?qū)ο骭第4頁
播客java基礎(chǔ)班面向?qū)ο骭第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、成都傳智播客教育 Java 面向?qū)ο?講師:Will 成都傳智播客教育 今日任務(wù)模板模式接口及其應(yīng)用內(nèi)部類枚舉成都傳智播客教育 抽象類的體現(xiàn)-模板模式抽象類是多個(gè)具體子類抽象出來的父類,具有高層次的抽象性;以該抽象類作為子類的模板可以避免子類設(shè)計(jì)的隨意性;抽象類的體現(xiàn)主要就是模板模式設(shè)計(jì),抽象類作為多個(gè)子類的通用模板,子類在抽象類的基礎(chǔ)上進(jìn)行拓展,但是子類在總體上大致保留抽象類的行為方式;編寫一個(gè)抽象父類,該父類提供了多個(gè)子類的通用方法,并把一個(gè)或多個(gè)抽象方法留給子類去實(shí)現(xiàn),這就是模板設(shè)計(jì)模式;模板模式應(yīng)用的簡(jiǎn)單規(guī)則:1.抽象父類可以只定義需要使用的某些方法,其余留給子類去實(shí)現(xiàn);2.父類提供的

2、方法只是定義了一個(gè)通用算法,其實(shí)現(xiàn)必須依賴子類的輔助;統(tǒng)一打印圖形周長和面積的例子成都傳智播客教育 接口(interface)的概念抽象類是從多個(gè)類中抽象出來的模板,若要將這種抽象進(jìn)行得更徹底,就得用到一種特殊的“抽象類” 接口;生活中聽說過的USB接口其實(shí)并不是我們所看到的那些插槽,而是那些插槽所遵循的一種規(guī)范;而我們看到的那些插槽是根據(jù)USB規(guī)范設(shè)計(jì)出來的實(shí)例而已,也就說插槽是USB的實(shí)例;對(duì)應(yīng)不同型號(hào)的USB設(shè)備而言,他們各自的USB插槽都需要遵循一個(gè)規(guī)范,遵守這個(gè)規(guī)范就可以保證插入插槽的設(shè)備能與主板正常通信;對(duì)于同一種型號(hào)的主板上的多個(gè)USB插槽,他們有相同的數(shù)據(jù)交換方式,相同的實(shí)現(xiàn)細(xì)

3、節(jié),可認(rèn)為他們都是同一個(gè)類的不同實(shí)例;成都傳智播客教育 接口,類,對(duì)象示意圖接口只定義了類應(yīng)當(dāng)遵循的規(guī)范,卻不關(guān)心這些類的內(nèi)部數(shù)據(jù)和其方法內(nèi)的實(shí)現(xiàn)細(xì)節(jié).接口只規(guī)定了這些類里必須提供的方法;從而分離了規(guī)范和實(shí)現(xiàn).增強(qiáng)了系統(tǒng)的可拓展性和維護(hù)性;成都傳智播客教育 interface定義接口定義一種規(guī)范,規(guī)定一個(gè)類必須做什么,但它不管如何具體去做;修飾符 interface 接口名 extends 父接口1,父接口2.沒有構(gòu)造方法,不能實(shí)例化;接口只能繼承接口,不能繼承類接口里沒有普通方法,方法全是抽象的;接口里的方法默認(rèn)修飾符是public abstract;接口里的字段全是全局常量,默認(rèn)修飾符是p

4、ublic static final;接口里的成員包括(主要是前兩個(gè)):全局常量公共的抽象方法內(nèi)部類(包括內(nèi)部類,內(nèi)部接口,內(nèi)部枚舉類);成都傳智播客教育 使用接口實(shí)現(xiàn)接口(支持多實(shí)現(xiàn))修飾符 class 類名 implements 接口1,接口2.接口的實(shí)現(xiàn)必須在 extends 之后;實(shí)現(xiàn)接口的方法必須是 public 類型接口不能創(chuàng)建實(shí)例,但是可以聲明引用類型的變量。此時(shí),引用類型的變量必須指向到其實(shí)現(xiàn)類對(duì)象。IStudent s = new String();/IStudent s = new StudentImpl();/格式:public class SubImpl extends

5、 Super implements IA,IB成都傳智播客教育 面向接口編程之制定標(biāo)準(zhǔn)電腦上有USB接口,只要是USB設(shè)備都可以插入電腦并使用。interface USB/定義USB標(biāo)準(zhǔn) void useUSB();/USB有使用USB的行為class Computer /定義電腦 public static void plugIn(USB usb)/安裝USB設(shè)備 usb.useUSB() ;/調(diào)用USB的行為 class Flash implments USB/創(chuàng)建USB設(shè)備-閃存class Print implements USB/創(chuàng)建USB設(shè)備-打印機(jī)成都傳智播客教育 面向接口編程 之

6、簡(jiǎn)單工廠模式interface ICellPhone void sendMsg();class Factory public static ICellPhone getInstance(String type) ICellPhone p = null; if (htc.equalsIgnoreCase(type) ff = new HTC(); else if (iphone.equalsIgnoreCase(type) ff = new IPhone();return p;屏蔽不同子類實(shí)現(xiàn)的差異,提高代碼的可拓展性和可維護(hù)性;成都傳智播客教育 面向接口編程 之適配器模式使用一個(gè)現(xiàn)成的類,但是

7、它的接口不完全符合你的需求,咋辦;interface IWindowvoid max();void min();void close();abstract class WindowAdapter implements IWindowpublic void max()public void min()public void close()class MyWindow extends WindowAdapter public void close()比如,窗體有變大,變小,關(guān)閉的行為,但是我現(xiàn)在只需要關(guān)閉行為;成都傳智播客教育 接口和抽象類相同點(diǎn):都位于繼承的頂端,用于被其他實(shí)現(xiàn)或繼承;都不能實(shí)例

8、化;都包含抽象方法,其子類都必須覆寫這些抽象方法;區(qū)別:抽象類為部分方法提供實(shí)現(xiàn),避免子類重復(fù)實(shí)現(xiàn)這些方法,提供代碼重用性;接口只能包含抽象方法;一個(gè)類只能繼承一個(gè)直接父類(可能是抽象類),卻可以實(shí)現(xiàn)多個(gè)接口;(接口彌補(bǔ)了Java的單繼承)二者的選用:優(yōu)先選用接口,盡量少用抽象類;需要定義子類的行為,又要為子類提供共性功能時(shí)才選用抽象類;成都傳智播客教育 抽象類和接口的區(qū)別成都傳智播客教育 內(nèi)部類類中有類內(nèi)部類:嵌套類外部類:宿主類把內(nèi)部類隱藏在外部類之內(nèi),不許同包的其他類訪問該類;內(nèi)部類可以訪問外部類的私有數(shù)據(jù),外部類不能訪問內(nèi)部類的實(shí)現(xiàn)細(xì)節(jié),比如字段;觀察編譯后的字節(jié)碼文件非靜態(tài)內(nèi)部類;靜

9、態(tài)內(nèi)部類,局部內(nèi)部類;匿名內(nèi)部類適合于僅使用一次使用的類;成都傳智播客教育 非靜態(tài)內(nèi)部類若外部類字段,內(nèi)部類字段,內(nèi)部類方法變量同名,則其訪問方式分別是:訪問外部類的字段:外部類類名.this.字段訪問內(nèi)部類字段:this.字段訪問內(nèi)部類方法的局部變量:字段成都傳智播客教育 非靜態(tài)內(nèi)部類例子成都傳智播客教育 在外部類以外訪問非靜態(tài)內(nèi)部類內(nèi)部類不能是private修飾,否則不能訪問: 為什么?外部類以外的地方定義內(nèi)部類變量OuterClass.InnerClass varName ;非靜態(tài)內(nèi)部類對(duì)象是存放在外部類的對(duì)象里的,因此在創(chuàng)建非靜態(tài)內(nèi)部類對(duì)象之前,必須先創(chuàng)建其外部類的對(duì)象OuterIns

10、tance.new InnerClass(參數(shù)列表);成都傳智播客教育 在外部類以外訪問非靜態(tài)內(nèi)部類例子成都傳智播客教育 靜態(tài)內(nèi)部類使用static修飾內(nèi)部類,該內(nèi)部類屬于其外部類,而不屬于外部類的實(shí)例;靜態(tài)內(nèi)部類可包括靜態(tài)成員也可包括非靜態(tài)成員。根據(jù)靜態(tài)成員不能訪問非靜態(tài)成員的規(guī)定,所以靜態(tài)內(nèi)部類不能訪問外部類實(shí)例成員,只能訪問外部類的靜態(tài)成員;成都傳智播客教育 靜態(tài)內(nèi)部類例子成都傳智播客教育 在外部類以外訪問靜態(tài)內(nèi)部類因?yàn)殪o態(tài)內(nèi)部類是外部類的類成員,因此在創(chuàng)建內(nèi)部類對(duì)象時(shí)不需創(chuàng)建外部類的對(duì)象;創(chuàng)建內(nèi)部類對(duì)象:new OuterClass.InnerClass(參數(shù)列表)注:靜態(tài)內(nèi)部類的全名

11、應(yīng)該是OuterClass.InnerClass,所以要看作是一個(gè)整體;成都傳智播客教育 在外部類以外訪問靜態(tài)內(nèi)部類例子成都傳智播客教育 局部內(nèi)部類局部內(nèi)部類:定義在方法里的內(nèi)部類;特點(diǎn):不能在宿主類以外的地方使用,局部內(nèi)部類也不能使用訪問修飾符和static修飾;局部內(nèi)部類只能訪問方法中final修飾的局部變量:因?yàn)閒inal修飾的變量相當(dāng)于一個(gè)常量,其生命周期超出了方法運(yùn)行的生命周期;成都傳智播客教育 匿名內(nèi)部類適合只使用一次的類不能是抽象類,因?yàn)橄到y(tǒng)在創(chuàng)建匿名內(nèi)部類的時(shí)候,會(huì)立即創(chuàng)建匿名內(nèi)部類的對(duì)象。匿名內(nèi)部類不能定義構(gòu)造器,因?yàn)槟涿麅?nèi)部類沒有類名。格式:new 父類構(gòu)造器(實(shí)參列表)

12、或 接口()/匿名內(nèi)部類的類體部分注意:匿名內(nèi)部類必須繼承一個(gè)父類或者實(shí)現(xiàn)一個(gè)接口,但最多只能一個(gè)父類或?qū)崿F(xiàn)一個(gè)接口;成都傳智播客教育 匿名內(nèi)部類成都傳智播客教育 設(shè)計(jì)顏色類設(shè)計(jì)一個(gè)類來存放RED,GREEN,BLUE三種顏色:public class Color public static final Integer RED = 1; public static final Integer GREEN= 2; public static final Integer BLUE = 3;.main. Integer red = Color.RED; Integer green= Color.GR

13、EEN; System.out.println(red + green);設(shè)計(jì)合理嗎?成都傳智播客教育 設(shè)計(jì)顏色類class Colorpublic static final Color RED = new Color(紅);public static final Color GREEN = new Color(綠);public static final Color BLUE = new Color(藍(lán));private String name;private Color(String name) = name;public String getName()return n

14、ame;成都傳智播客教育 枚舉類(enum)使用enum聲明,默認(rèn)直接繼承了java.lang.Enum類,而不是Object類;枚舉類的對(duì)象是固定的,實(shí)例個(gè)數(shù)有限,枚舉對(duì)象后可以跟()。枚舉元素必須位于枚舉類體中的最開始部分,枚舉元素后要有分號(hào)與其他成員分隔。枚舉類的構(gòu)造方法的權(quán)限修飾符默認(rèn)是private;一旦枚舉對(duì)象后面加上,那么該對(duì)象實(shí)際是枚舉匿名內(nèi)部類對(duì)象;所有枚舉類都提供一個(gè)靜態(tài)的values()方法(返回該枚舉類所有對(duì)象組成的數(shù)組),便于遍歷所有枚舉對(duì)象;所有枚舉類都提供一個(gè)靜態(tài)的valueOf(String name)方法, 返回枚舉類中對(duì)象名等于 name的對(duì)象。public

15、 enum ColorRED(), GREEN(), BLUE;成都傳智播客教育 使用枚舉類Enum是一個(gè)抽象類,是所有枚舉類的直接父類;Enum常見方法:String name();/ 返回枚舉實(shí)例名稱;int ordinal();/ 返回枚舉實(shí)例在枚舉類中的索引,從0開始;String toString();/ 返回枚舉對(duì)象的自我描述;(看源代碼)在switch語句中使用枚舉對(duì)象;在枚舉類中使用toString方法;使用for-each中操作枚舉對(duì)象;枚舉類的構(gòu)造方法;枚舉類覆寫接口抽象方法的兩種方式;注意:匿名內(nèi)部類枚舉實(shí)現(xiàn)單例模式;成都傳智播客教育 例子成都傳智播客教育 枚舉類的構(gòu)造方

16、法枚舉類既然是一種特殊的類,那么也應(yīng)該有自己的構(gòu)造方法;普通類創(chuàng)建對(duì)象的時(shí)候,可以接收參數(shù),那么枚舉類呢?enum Color RED(紅),GREEN(綠),BLUE(藍(lán));private String name;private Color(String name) = name;public String getName() return name;public String toString() return ;/this表示誰 ?成都傳智播客教育 枚舉類實(shí)現(xiàn)接口枚舉類覆寫接口抽象方法的兩種方式:在枚舉類中實(shí)現(xiàn)接口的抽象方法;在枚舉匿名內(nèi)部類中實(shí)現(xiàn)接口的抽象方法;enum Color implements I RED()public void show() , GREENpublic void show() , BLUEpublic void show() ;interface I void show();enum Color implements I RED(), GREEN, BLUE; public v

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論