




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Java面向對象根底〔續〕類的繼承final關鍵字抽象類接口多態包4.1類的繼承4.2Final關鍵字4.3抽象類和接口4.4多態4.5包4.6訪問控制4.1類的繼承4.1.1繼承的概念程序中,繼承描述的是事物之間的所屬關系,通過繼承可以使多種事物之間形成一種關系體系。在Java中,類的繼承是指在一個現有類的根底上去構建一個新的類,構建出來的新類被稱作子類,現有類被稱作父類,子類會自動擁有父類所有可繼承的屬性和方法。在程序中,如果想聲明一個類繼承另一個類,需要使用extends關鍵字,接下來通過一個案例來學習子類是如何繼承父類的。4.1類的繼承4.1.1繼承的概念程序中,繼承描述的是事物之間的所屬關系,通過繼承可以使多種事物之間形成一種關系體系。在Java中,類的繼承是指在一個現有類的根底上去構建一個新的類,構建出來的新類被稱作子類,現有類被稱作父類,子類會自動擁有父類所有可繼承的屬性和方法。在程序中,如果想聲明一個類繼承另一個類,需要使用extends關鍵字,接下來通過一個案例來學習子類是如何繼承父類的。4.1類的繼承4.1類的繼承4.1.1繼承的概念在類的繼承中,需要注意一些問題,具體如下:1、在Java中,類只支持單繼承,不允許多重繼承,也就是說一個類只能有一個直接父類,例如下面這種情況是不合法的。2、多個類可以繼承一個父類,例如下面這種情況是允許的。4.1類的繼承4.1.1繼承的概念在類的繼承中,需要注意一些問題,具體如下:3、在Java中,多層繼承是可以的,即一個類的父類可以再去繼承另外的父類,例如C類繼承自B類,而B類又可以去繼承A類,這時,C類也可稱作A類的子類。下面這種情況是允許的。4.1類的繼承重寫父類方法在繼承關系中,子類會自動繼承父類中定義的方法,但有時在子類中需要對繼承的方法進行一些修改,即對父類的方法進行重寫。需要注意的是,在子類中重寫的方法需要和父類被重寫的方法具有相同的方法名、參數列表以及返回值類型。4.1類的繼承重寫父類方法從例程4-3的運行結果可以看出,當子類重寫父類的方法后,子類對象將無法訪問父類被重寫的方法,為了解決這個問題,在Java中專門提供了一個super關鍵字用于訪問父類的成員。例如訪問父類的成員變量、成員方法和構造方法。接下來分兩種情況來學習一下super關鍵字的具體用法。1、使用super關鍵字調用父類的成員變量和成員方法。具體格式如下:4.1類的繼承4.1類的繼承重寫父類方法2、使用super關鍵字調用父類的構造方法。具體格式如下:4.1類的繼承重寫父類方法例程4-4中在實例化Dog對象時一定會調用Dog類的構造方法。從運行結果可以看出,Dog類的構造方法被調用時父類的構造方法也被調用了。需要注意的是,通過super調用父類構造方法的代碼必須位于子類構造方法的第一行,并且只能出現一次。將例程4-4第11行代碼去掉,再次編譯程序會報錯:4.1類的繼承重寫父類方法出錯的原因是,在子類的構造方法中一定會調用父類的某個構造方法。這時可以在子類的構造方法中通過super指定調用父類的哪個構造方法,如果沒有指定,在實例化子類對象時,會自動調用父類無參的構造方法。為了解決上述程序的編譯錯誤,可以在子類中顯示地調用父類中已有的構造方法,當然也可以選擇在父類中定義無參的構造方法,現將例程4-4中的Animal類進行修改,如例程4-5所示。4.2final關鍵字final關鍵字可用于修飾類、變量和方法,它有“這是無法改變的〞或者“最終〞的含義,因此被final修飾的類、變量和方法將具有以下特性:1、final修飾的類不能被繼承。2、final修飾的方法不能被子類重寫。3、final修飾的變量〔成員變量和局部變量〕是常量,只能賦值一次。4.2final關鍵字4.2.1final關鍵字修飾類Java中的類被final關鍵字修飾后,該類將不可以被繼承,也就是不能夠派生子類。接下來通過一個案例來驗證,如例程4-6所示。4.2final關鍵字4.2.2final關鍵字修飾方法當一個類的方法被final關鍵字修飾后,這個類的子類將不能重寫該方法。接下來通過一個案例來驗證,如例程4-7所示。這是因為Animal類的shout()方法被final所修飾。由此可見,被final關鍵字修飾的方法為最終方法,子類不能對該方法進行重寫。正是由于final的這種特性,當在父類中的定義某個方法時,如果不希望被子類重寫,就可以使用final關鍵字修飾該方法。4.2final關鍵字這是因為使用final關鍵字修飾成員變量時,虛擬機不會對其進行初始化。因此使用final修飾成員變量時,需要在定義變量的同時賦予一個初始值,下面將第2行代碼修改為:finalStringname="李芳";//為final關鍵字修飾的name屬性賦值4.3抽象類和接口4.3.1抽象類當定義一個類時,常常需要定義一些方法來描述該類的行為特征,但有時這些方法的實現方式是無法確定的。針對上面描述的情況,Java允許在定義方法時不寫方法體,不包含方法體的方法為抽象方法,抽象方法必須使用abstract關鍵字來修飾,具體例如如下:4.3抽象類和接口4.3.1抽象類當一個類中包含了抽象方法,該類必須使用abstract關鍵字來修飾,使用abstract關鍵字修飾的類為抽象類,具體例如如下:4.3抽象類和接口4.3.1抽象類在定義抽象類時需要注意,包含抽象方法的類必須聲明為抽象類,但抽象類可以不包含任何抽象方法,只需使用abstract關鍵字來修飾即可。另外,抽象類是不可以被實例化的,因為抽象類中有可能包含抽象方法,抽象方法是沒有方法體的,不可以被調用。如果想調用抽象類中定義的方法,那么需要創立一個子類,在子類中將抽象類中的抽象方法進行實現。4.3抽象類和接口4.3.2接口如果一個抽象類中的所有方法都是抽象的,那么可以將這個類用另外一種方式來定義,即接口。在定義接口時,需要使用interface關鍵字來聲明,具體例如如下:從例如中會發現抽象方法breathe()并沒有使用abstract關鍵字來修飾,這是因為接口中定義的方法和變量都包含一些默認修飾符。接口中定義的方法默認使用“publicabstract〞來修飾,即抽象方法。接口中的變量默認使用“publicstaticfinal〞來修飾,即全局常量。4.3抽象類和接口4.3.2接口由于接口中的方法都是抽象方法,因此不能通過實例化對象的方式來調用接口中的方法。此時需要定義一個類,并使用implements關鍵字實現接口中所有的方法。接下來通過一個案例來學習,如例程4-11所示。4.3抽象類和接口4.3.2接口例程4-11演示的是類與接口之間的實現關系,在程序中,還可以定義一個接口使用extends關鍵字去繼承另一個接口,接下來對例程4-11稍加修改,演示接口之間的繼承關系,修改后的代碼如例4-12所示。4.3抽象類和接口4.3.2接口1、接口中的方法都是抽象的,不能實例化對象。2、當一個類實現接口時,如果這個類是抽象類,那么實現接口中的局部方法即可,否那么需要實現接口中的所有方法。3、一個類通過implements關鍵字實現接口時,可以實現多個接口,被實現的多個接口之間要用逗號隔開。具體例如如下:4.3抽象類和接口4.3.2接口4、一個接口可以通過extends關鍵字繼承多個接口,接口之間用逗號隔開。具體例如如下:4.3抽象類和接口4.3.2接口5、一個類在繼承另一個類的同時還可以實現接口,此時,extends關鍵字必須位于implements關鍵字 之前。具體例如如下:4.4多態4.4.1多態概述Java引用變量有兩個類型:一個是編譯時的類型,一個是運行時的類型,編譯時的類型由聲明該變量時使用的類型決定,運行時的類型由實際賦給該變量的對象決定。如果編譯時類型和運行時的類型不一致,這就有可能出現所謂的多態。兩個相同類型的引用變量,由于它們實際引用的對象的類型不同,當它們調用同名方法時,可能呈現出多種行為特征,這就是多態。4.4多態4.4.1多態概述在設計一個方法時,通常希望該方法具備一定的通用性。在同一個方法中,這種由于參數類型不同而導致執行效果各異的現象就是多態。在Java中為了實現多態,允許使用一個父類類型的變量來引用一個子類類型的對象,根據被引用子類對象特征的不同,得到不同的運行結果,接下來通過一個案例來演示,如例程4-13所示。4.4多態4.4.2對象的類型轉換在多態的學習中,涉及到將子類對象當做父類類型使用的情況,例如下面兩行代碼:將子類對象當做父類使用時不需要任何顯式地聲明,需要注意的是,此時不能通過父類變量去調用子類中某些方法。4.4多態4.4多態4.4.2對象的類型轉換將例程4-14中的animalShout()方法進行修改,具體代碼如下:4.4多態4.4.2對象的類型轉換需要注意的是,在進行類型轉換時也可能出現錯誤,例如在例程4-14中調用animalShout()方法時傳入一個Dog類型的對象,這時進行強制類型轉換就會出現出錯,如例程4-15所示。出錯的原因是,在調用animalShout()方法時,傳入一個Dog對象,在強制類型轉換時,Animal類型的變量無法強轉為Cat類型。4.4多態4.4.2對象的類型轉換針對這種情況,Java提供了一個關鍵字instanceof,它可以判斷一個對象是否為某個類(或接口)的實例或者子類實例,語法格式如下接下來對例程4-15的animalShout()方法進行修改,具體代碼如下:多態的優點?提高了代碼的可擴展性和維護性多態的缺點?不能直接使用子類的特有功能如何克服?向下轉型〔要兼容〕我們在電子市場隨便挑選了一塊計算機主板和一塊PCI卡〔網卡、聲卡等〕,結果,這塊PCI卡能夠很好地利用到這塊主板上,雖然主板廠商和PCI卡廠商不是同一家,但他們都知道同一個標準——PCI標準。4.4.4匿名內部類前面多態的講解中,如果方法的參數被定義為一個接口類型,那么就需要定義一個類來實現接口,并根據該類進行對象實例化。除此之外,還可以使用匿名內部類來實現接口。4.4.4匿名內部類首先看一下匿名內部類的格式,具體如下。接下來對例程4-18進行改寫,如例程4-19所示。4.4.4匿名內部類1、在調用animalShout()方法時,在方法的參數位置寫上newAnimal(){},這相當于創立了一個實例對象,并將對象作為參數傳給animalShout()方法。在newAnimal()后面有一對大括號,表示創立的對象為Animal的子類實例,該子類是匿名的。具體代碼如下所示:4.4.4匿名內部類4.5包(package)4.5.1包的定義與使用為了便于對硬盤上的文件進行管理,通常都會將文件分目錄進行存放。同理,在程序開發中,也需要將編寫的類分目錄存放便于管理,為此,Java引入了包(package)機制,程序可以通過聲明包的方式對Java類定義目錄。作用:對類進行分類管理,區分同名類語法:package包名;多級包名,用.分隔
packageabc;package.ccnu.cs;4.5包(package)當編譯一個聲明了包的Java源文件,需要使用命令生成與包名對應的目錄:其中,“-d〞用來指定生成的類文件的位置,“.〞表示在當前目錄,整行命令表示生成帶包目錄的.class文件并存放在當前目錄下,當然,生成的類文件還可以存放在其它目錄下,這時只需要將“.〞用其它路徑替換即可。4.5包(package)4.5.1包的定義與使用接下來以HelloWorld為例,分步驟講解如何使用包機制管理Java的類文件。1、編寫HelloWorld類,在類名之前聲明當前類所在的包為“cn.ccnu〞。4.5包(package)4.5.1包的定義與使用2、javac–d.編譯源文件,在當前目錄下查看包名“cn.ccnu〞對應的“cn\ccnu〞目錄,發現該目錄下存放了HelloWorld.class文件。4.5包(package)4.5.1包的定義與使用3、使用“javacn.ccnu.HelloWorld〞命令運行class文件,需要注意的是,在運行.class文件時,需要跟上包名,運行結果如圖4-38所示。4.5包(package)4.5.2import語句import關鍵字解決當不同包下的類之間互相訪問的時候,每次都需要加包的全名,很麻煩!Java的核心類主要放在java這個包以及其子包下,Java擴展的大局部類都放在javax包以及其子包下。Java語言中的常用包:java.lang:包含Java語言的核心類,如String、Math、System和Thread類等,使用這個包中的類無須使用import語句導入,系統會自動導入這個包下的所有類。java.util:包含Java中大量工具類、集合類等,例如Arrays、List、Set等。:包含Java網絡編程相關的類和接口。java.io:包含了Java輸入、輸出有關的類和接口。java.awt:包含用于構建圖形界面(GUI)的相關類和接口。4.5包(package)4.5.3給Java應用打包jar文件的全稱是JavaArchiveFile,它是一種壓縮文件,獨立于任何操作系統平臺,習慣上也將jar文件稱為jar包。在使用jar包時,只需要在classpath環境變量中包含這個jar文件的路徑,Java虛擬機就能自動在內存中解壓這個jar文件,根據包名所對應的目錄結構去尋找所需要的類。4.5包(package)4.5.3給Java應用打包給Java應用打包有很多好處:平安:可以對jar文件進行數字簽名,讓能識別數字簽名的用戶使用。節省空間:當把.class文件打成jar壓縮文件,會節省空間,如果將jar文件在網絡上傳輸,也會加快傳輸速率。可移植性:只要有Java虛擬機,jar包就可以在任何平臺上運行。4.5包(package)4.5.3給Java應用打包接下來在命令行窗口輸入jar命令,查看jar命令的用法幫助。4.5包(package)4.5.3給Java應用打包壓縮jar文件以及運行jar包。1、翻開命令提示符,進入D:\cn\ccnu目錄,輸入命令-c代表創立歸檔的文件-v代表在標準輸出中生成詳細輸出-f代表指
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中地理野外實踐課程設計與應用論文
- 2024年度河南省二級造價工程師之建設工程造價管理基礎知識真題練習試卷B卷附答案
- 小學環保教育實驗:廚余堆肥蚯蚓糞對小白菜生長實驗觀察報告論文
- 中國醫藥行業用黃原膠行業市場前景預測及投資價值評估分析報告
- 節假日裝修管理制度
- 苯乙烯儲存管理制度
- 茶藝坊安全管理制度
- 調試組1019題庫題庫(500道)
- 一年級《古對今》課件
- 財務預算練習題及參考答案
- GA/T 1499-2018卷簾門安全性要求
- 網上支付跨行清算系統報文交換標準
- 養老護理員(高級)培訓課程-康復護理課件
- 供應商大會品質報告課件
- 職工《勞動法》與《勞動合同法》知識培訓課件
- 名師教學設計《Maybe you should learn to relax.》完整教學教案
- 08S305-小型潛水泵選用及安裝圖集
- 醫院手術患者術前術后訪視記錄單
- 機械原理課程設計-鎖梁自動成型機床運動方案設計說明書
- (完整版)PEP人教版小學四年級英語下冊全冊單詞表帶音標
- 上海光電心電圖機9620P資料
評論
0/150
提交評論