《面向對象程序設計項目教程》課件 項目8 了解抽象類、接口和枚舉_第1頁
《面向對象程序設計項目教程》課件 項目8 了解抽象類、接口和枚舉_第2頁
《面向對象程序設計項目教程》課件 項目8 了解抽象類、接口和枚舉_第3頁
《面向對象程序設計項目教程》課件 項目8 了解抽象類、接口和枚舉_第4頁
《面向對象程序設計項目教程》課件 項目8 了解抽象類、接口和枚舉_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

面向對象程序設計項目教程本章學習目標:●掌握抽象類的定義、應用和特點●掌握接口的定義、應用和特點●理解枚舉類的定義和應用項目8了解抽象類、接口和枚舉類任務1part掌握抽象類的應用

抽象類是對問題領域進行分析后得出的抽象概念,是對一批看上去不同,但是本質上相同的具體概念的抽象。

定義抽象方法只需在普通方法上增加abstract修飾符,并把普通方法的方法體全部去掉,并在方法后增加分號即可。抽象類和抽象方法必須使用“abstract”關鍵字來修飾,其語法格式如下:【訪問符】abstractclass類名{

【訪問符】abstract<返回值類型>方法名([參數列表]);…}1.1抽象類的定義

有抽象方法的類只能被定義為抽象類,但抽象類中可以沒有抽象方法。定義抽象類和抽象方法的規(guī)則如下:

(1)abstract關鍵字放在class前,指明該類是抽象類。

(2)abstract關鍵字放在方法的返回值類型前,指明該方法是抽象方法。

(3)抽象類不能被實例化,即無法通過new關鍵字直接創(chuàng)建抽象類的實例。

(4)一個抽象類中可以有多個抽象方法,也可以有實例方法。

(5)抽象類可以包含成員變量、構造方法、初始化塊、內部類、枚舉類和方法等,但不能通過構造方法創(chuàng)建實例,可在子類創(chuàng)建實例時調用。

(6)定義抽象類有三種情況:直接定義一個抽象類;繼承一個抽象類,但沒有完全實現父類包含的抽象方法;實現一個接口,但沒有完全實現接口中包含的抽象方法。

1.1抽象類的定義

抽象類不能實例化,只能被當成父類來繼承。從語義角度上講,抽象類是從多個具有相同特征的類中抽象出來的一個父類,具有更高層次的抽象,作為其子類的模板,從而避免子類設計的隨意性。。1.2抽象類的使用

抽象類體現的就是一種模板模式的設計,抽象類作為多個子類的通用模板,子類在抽象類的基礎上進行擴展、改造,但子類總體上會大致保留抽象類的行為方式。

如果編寫一個抽象父類,父類提供了多個子類的通用方法,并把一個或多個方法留給子類實現,這就是一種模板模式,模板模式也是十分常見且簡單的設計模式之一。

1.3抽象類的作用任務2part掌握接口的應用2.1接口的定義Java只支持單繼承,不支持多重繼承,即一個類只能繼承一個父類,這一缺陷可以通過接口來彌補。Java允許一個類實現多個接口,這樣使程序更加靈活、易擴展。和類定義不同,定義接口不再使用class關鍵字,而是使用interface關鍵字。接口定義的基本語法格式如下:

【訪問符】interface接口名{//靜態(tài)常量定義//抽象方法定義//默認方法、類方法、內部類等其他定義}2.1接口的定義

其中,定義接口要遵守如下規(guī)則:

(1)訪問符可以是public或者默認,默認采用包權限訪問控制,即在相同包中才可以訪問該接口。

(2)在接口體力可以包含靜態(tài)常量、抽象方法、內部類、內部接口以及枚舉類的定義。從Java8版本開始允許接口中定義默認方法、類方法。

(3)與類的默認訪問符不同,接口體內定義的常量、方法等都默認為public,可以省略public關鍵字。

(4)接口名應與類名采用相同的命名規(guī)范。

(5)接口里不能包含構造方法和初始化塊。

2.1接口的定義在接口中聲明靜態(tài)常量、抽象方法、默認方法、類方法、內部類和內部接口。其中:

(1)接口中定義的成員變量如果沒有聲明修飾符,系統會自動為其增加“publicstaticfinal”進行修飾,即接口中定義的成員變量都是靜態(tài)常量。

(2)接口中定義的方法只能是抽象方法、默認方法和類方法。因此,如果是定義普通方法沒有聲明修飾符,系統將自動增加“publicabstract”進行修飾,即接口中定義的普通方法都是抽象方法,不能有方法體。

(3)從Java8開始,允許在接口中定義默認方法,默認方法必須使用“default”關鍵字修飾,不能使用“static”關鍵字修飾。因此,不能直接使用接口來調用默認方法,必須通過接口的實現類的實例對象來調用默認方法,默認方法必須有方法體。

(4)從Java8開始,允許在接口中定義類方法,類方法必須使用“static”關鍵字修飾,不能使用“default”關鍵字修飾,類方法必須有方法體,可以直接通過接口來調用類方法。

(5)接口中定義的內部類、內部接口以及內部枚舉都默認為“publicstatic”。2.2接口的實現

接口不能用于創(chuàng)建實例,但接口可以用于聲明引用類型變量。當使用接口來聲明引用類型變量時,這個引用類型變量必須引用到其實現類的對象。除此之外,接口的主要用途就是被實現類實現。

一個類可以實現一個或多個接口,實現則使用implements關鍵字。由于一個類可以實現多個接口,這也是為Java單繼承靈活性不足所做的補充。類實現接口的語法格式如下:

【訪問符】【修飾符】class類名implements接口名1[,接口名2…]{//類體部分}2.2接口的實現

其中:

(1)訪問符、修飾符、class和類名與前面類的聲明格式完全相同。

(2)implements關鍵字用于實現接口。

(3)一個類可以實現多個接口,接口之間使用逗號隔開。

(4)一個類在實現一個或多個接口時,必須全部實現這些接口中定義的所有抽象方法,否則該類必須定義為抽象類。

(5)一個類實現某個接口時,該類將會獲得接口中定義的常量和方法等。2.3接口的繼承

接口的繼承與類的繼承不一樣,接口完全支持多重繼承,即一個接口可以有多個父接口。除此之外,接口的繼承與類的繼承相似,當一個接口繼承父接口時,該接口將獲得父接口中國定義的所有方法和常量。

一個接口可以繼承多個接口時,多個接口跟在extends關鍵字之后,并用逗號隔開,接口繼承語法格式如下:

【訪問符】interface子接口名extends父接口名1[,父接口名2…]{//子接口新增的常量和方法}2.3接口的繼承

接口和抽象類有很多相似之處,都具有如下特征:

(1)接口和抽象類都不能被實例化,都需要被其他類實現或繼承。

(2)接口和抽象類的引用變量都可以指向其實現類或子類的實例對象。

(3)接口和抽象類都可以包含抽象方法,實現接口和繼承抽象類時都必須實現這些抽象方法。2.3接口的繼承

但接口與抽象類之間也存在區(qū)別,主要體現在以下幾點:

(1)接口體現的是一種規(guī)范,這種規(guī)范類似于總綱,是系統各模塊應該遵循的標準,以便各模塊之間實現耦合以及通信功能;抽象類體現的是一種模板式設計,抽象類可以被當成系統實現過程中的中間產品,該產品已實現了部分功能但不能當成最終產品,必須進一步完善,而完善可能有幾種不同的方式。

(2)接口中除了默認方法和類方法,不能為普通方法提供方法實現,而抽象類可以為普通方法提供方法實現。

(3)接口中定義的變量默認為publicstaticfinal,且必須賦值,其實現類中不能重新定義,也不能改變其值,即接口中定義的變量都是最終的靜態(tài)常量;而抽象類中定義的變量與普通類一樣,默認為友好的,其實現類可以重新定義也可以根據需要改變值。

(4)接口中定義的方法都默認為public,而抽象類則與普通類一樣,默認為友好的。

(5)接口不包含構造方法,而抽象類可以包含構造方法。抽象類的構造方法不是用于創(chuàng)建對象,而是讓其子類調用以便完成初始化操作。

(6)一個類最多只能有一個直接父類,包括抽象類;但一個類可以直接實現多個接口,一個接口也可以有多個父接口。任務3part掌握枚舉類的應用枚舉類是一種特殊的類,與普通類有如下區(qū)別:

●枚舉類可以實現一個或多個接口,使用enum定義的枚舉類默認繼承了java.lang.Eunm類,而不是繼承Object類,因此枚舉類不能顯示繼承其他父類。

●使用enum定義非抽象的枚舉類時默認會使用final修飾,因此枚舉類不能派生子類。

●枚舉類的構造方法只能使用private訪問修飾符,如果省略,則默認使用private修飾;如果強制指定訪問修飾符,則只能指定為private。

●枚舉類的所有實例必須在枚舉類的類體第一行顯式列出,否則該枚舉永遠不能產生實例。列出的枚舉實例默認使用publicstaticfinal進行修飾。枚舉本節(jié)概述3.1枚舉類的定義

使用enum關鍵字來定義一個枚舉類,語法格式如下:[修飾符]enum枚舉類名{ //第一行列舉枚舉實例 ......}

下述代碼定義一個季節(jié)枚舉類,該枚舉類中有4個枚舉實例:春、夏、秋、冬。代碼如下所示。

【代碼8.7】SeasonEnum.javapackagecom;publicenumSeasonEnum{ //在第一行列出4個枚舉實例:春、夏、秋、冬 SPRING,SUMMER,FALL,WINTER;}3.1枚舉類的定義

上述代碼中SPRING、SUMMER、FALL、WINTER被稱為枚舉實例,其類型就是聲明的SeasonEnum枚舉類型,其默認使用publicstaticfinal進行修飾。枚舉實例之間使用英文格式逗號“,”隔開,枚舉值列舉之后使用英文格式分號“;”結束。

枚舉一旦被定義,就可以直接使用該類型的枚舉實例,枚舉實例的聲明和使用方式類似于基本類型,但不能使用new關鍵字實例化一個枚舉。所有枚舉類型都會包括兩個預定義方法:values()和ValueOf(),其功能描述如表8-1所示。3.1枚舉類的定義

對上述代碼需要注意三點:

●調用values()方法可以返回SeasonEnum枚舉類的所有實例值;

●定義一個枚舉類型的對象時,不能使用new關鍵字,而是使用枚舉類型的實例值直接賦值;

●在switch語句中直接使用枚舉類型作為表達式進行判斷,而case表達式中的值直接使用枚舉實例值的名字,前面不能使用枚舉類作為限定。3.2包含屬性和方法的枚舉類

枚舉類也是一種類,具有

溫馨提示

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

最新文檔

評論

0/150

提交評論