




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章
類與類的關(guān)系
5.1類與類的關(guān)系
5.2類的繼承
5.3抽象類與抽象方法
5.4接口5.5包
5.1類與類的關(guān)系使用關(guān)系
包含關(guān)系
繼承關(guān)系
類間的使用關(guān)系當(dāng)類A需要從
B類對(duì)象中獲得信息時(shí),稱類A與類B之間存在使用關(guān)系。一般情況下,當(dāng)在類A的一個(gè)方法中創(chuàng)建、接收或返回類B的對(duì)象時(shí),稱類A使用類B。TestPerson.java…getName()setName()…main(){創(chuàng)建Person類對(duì)象調(diào)用Person類的方法}TestPerson類Person類使用包含關(guān)系
當(dāng)類A中的一個(gè)屬性是類B的對(duì)象時(shí),稱類A與類B存在包含關(guān)系,包容關(guān)系是一個(gè)“有一個(gè)”關(guān)系,如果類A包含類B,可以稱類A中有一個(gè)類B。
例如car類和engine類
//域定義Enginee;intspeed;…Engine類Car類包含繼承關(guān)系繼承是面向?qū)ο蟮囊粋€(gè)重要特性,當(dāng)類A是類B的特例時(shí),稱類A繼承了類B。子類與父類之間存在“是一個(gè)”的關(guān)系,子類繼承自父類,因此子類也是一個(gè)父類。
吉普車是汽車的一個(gè)特例,它具有汽車的屬性,同時(shí)具有自己的一些特性。
Employer類Manager類5.2類的繼承
存在兩個(gè)類:類A與類B,如果類B中擁有類A中所有的域與方法,就稱這兩個(gè)類之間存在繼承關(guān)系,并稱類B繼承于類A。其中,類B被稱為子類,類A叫做超類(superclass),也叫做基類(baseclass)或父類(parentclass)。
子類繼承父類的屬性時(shí),不能改變父類中類成員的訪問(wèn)權(quán)限,即繼承自父類中類成員的權(quán)限在子類中仍然保持不變。
自然界生物類的繼承關(guān)系圖
子類的創(chuàng)建和使用
類繼承是用關(guān)鍵字extends來(lái)實(shí)現(xiàn)的
publicclassWorkerextendsPerson{…}子類父類TestInheritance.java
類繼承的傳遞性類繼承具有傳遞性,如果類B繼承類A,而類C又繼承類B,那么類C中不僅擁有類B中的所有成員,還擁有類A中的所有成員。
域的隱藏
父類A和子類B中都定義了名稱相同的成員變量x,稱為域的隱藏。在域的隱藏中,子類和父類中的該變量名稱必須相同,而變量的類型可以不同Java規(guī)定,當(dāng)執(zhí)行從父類繼承的方法時(shí),處理的是繼承自父類的變量;當(dāng)子類執(zhí)行由自己定義的方法時(shí),處理的是自己定義的成員變量,而將繼承自父類的名稱相同的域隱藏起來(lái)。
classA{
intx=3;publicvoidm(){x++;
System.out.println(“thexofAis”+x);}}classBextendsA{
intx=20;publicvoidn(){x--;
System.out.println(“thexofBis”+x);}}classB{intx;intx;//從類A繼承的域
publicvoidm(){//從類A繼承方法
x++;System.out.print(“thexofAis”+x);}publicvoidn(){x--;
System.out.println(“thexofBis”+x);}}等價(jià)于//類A的x//類B的x域的隱藏類中發(fā)生域的隱藏后,子類中的域覆蓋了父類中同名的域,如果想要訪問(wèn)被隱藏的域,必須在域前面添加前綴,前綴用關(guān)鍵字super加圓點(diǎn)操作符。B.java
方法的覆蓋
方法的覆蓋是在子類和父類中方法名相同、參數(shù)表相同和返回值類型相同的方法,這時(shí),子類中的方法將會(huì)覆蓋父類中的同名方法。
子類和父類中的方法必須滿足以下三個(gè)條件才能實(shí)現(xiàn)方法的覆蓋:相同的方法名相同的方法返回類型相同的參數(shù)表,即參數(shù)的個(gè)數(shù)、順序和參數(shù)的類型必須完全相同。
super關(guān)鍵字關(guān)鍵字super在Java中,表示當(dāng)前對(duì)象的直接父類,是當(dāng)前對(duì)象的直接父類對(duì)象的引用。在類繼承中,使用super關(guān)鍵字可以訪問(wèn)超類中子類隱藏的域和被子類覆蓋的方法。程序V.java
繼承關(guān)系中的構(gòu)造方法在類繼承過(guò)程中,子類繼承了父類的所有成員,但是子類不能顯式使用父類的構(gòu)造方法。例如:Vb=newA();//錯(cuò)誤的用法
子類對(duì)父類構(gòu)造方法的繼承遵循下面的規(guī)則:創(chuàng)建子類對(duì)象實(shí)例時(shí),系統(tǒng)可以自動(dòng)調(diào)用父類的無(wú)參數(shù)構(gòu)造方法初始化屬于父類的數(shù)據(jù)。對(duì)于父類中帶參數(shù)的構(gòu)造方法,系統(tǒng)不能自動(dòng)調(diào)用它們,只能通過(guò)在子類構(gòu)造方法中使用關(guān)鍵字super進(jìn)行調(diào)用,并且,super語(yǔ)句必須是子類構(gòu)造方法中的第一個(gè)可執(zhí)行語(yǔ)句UseConstru.java
類對(duì)象之間的類型轉(zhuǎn)換
類作為一種復(fù)合數(shù)據(jù)類型,與基本數(shù)據(jù)類型的變量一樣,不同類型的類對(duì)象之間也可以進(jìn)行類型轉(zhuǎn)換。類型轉(zhuǎn)換也分為顯式類型轉(zhuǎn)換和隱式類型轉(zhuǎn)換。
類型轉(zhuǎn)換只能在父類對(duì)象和子類對(duì)象之間進(jìn)行父類與子類對(duì)象之間的類型轉(zhuǎn)換規(guī)則是:類對(duì)象轉(zhuǎn)換為父類類型時(shí),可以進(jìn)行隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換。父類對(duì)象轉(zhuǎn)換為子類類型時(shí),必須進(jìn)行顯式類型轉(zhuǎn)換。例如:Bref_b,b=newB();Aa;a=b;ref_b=(B)a;類型轉(zhuǎn)換的一個(gè)問(wèn)題如果在程序中創(chuàng)建父類A的對(duì)象,將它進(jìn)行類型轉(zhuǎn)換為子類類型B。雖然編譯時(shí)不會(huì)出錯(cuò),運(yùn)行時(shí)將會(huì)拋出一個(gè)異常。
Java.lang.ClassCastException將D.java改為如下代碼:classD{publicstaticvoidmain(String[]args){Bref_b;Aa=newA();ref_b=(B)a;…}}
classD{publicstaticvoidmain(String[]args){Bref_b;Bb=newB();Aa;a=b;ref_b=(B)a;…}}類型轉(zhuǎn)換的一個(gè)問(wèn)題為了避免這種情況發(fā)生,可以采用instanceof運(yùn)算符來(lái)檢查對(duì)象是不是要轉(zhuǎn)換類的實(shí)例。將上面類D的代碼改為如下代碼,在進(jìn)行類型轉(zhuǎn)換時(shí),先進(jìn)行類型檢查,避免了異常的發(fā)生:classD{publicstaticvoidmain(String[]args){Bref_b;Aa=newA();if(ainstanceofB){ref_b=(B)a;
System.out.println("a.x="+a.x);
System.out.println("ref_b.x="+ref_b.x+",ref_b.y="+ref_b.y);}}}抽象類與抽象方法
在面向?qū)ο蟪绦蛟O(shè)計(jì)中,越是處在繼承結(jié)構(gòu)的頂層的類,就越概括、越抽象。我們常常需要定義一些表示抽象概念的類,這些類為子類提供一個(gè)實(shí)現(xiàn)框架,本身卻不能提供具體的實(shí)例,這稱為抽象類。Java中用關(guān)鍵字abstract表示抽象意義,abstract可以修飾類和方法。抽象類與抽象方法用abstract修飾的方法稱為抽象方法,抽象方法只有方法頭,沒有方法體定義,也就是說(shuō),抽象方法沒有具體的實(shí)現(xiàn)。用abstract修飾的類稱為抽象類,抽象類是一種沒有完全實(shí)現(xiàn)的類,即在抽象類中擁有抽象方法。包含抽象方法的類必須被聲明為抽象類,并且不能用抽象類聲明具體的實(shí)例對(duì)象。抽象類
抽象類是本身不能被實(shí)例化的類,它只能作為其它類的超類。在面向?qū)ο缶幊讨?,抽象類的設(shè)計(jì)是為了使程序的結(jié)構(gòu)更加清晰,功能更加明確。例如:GSM手機(jī)用戶管理系統(tǒng)中用戶類的設(shè)計(jì)。GsmUserPostGsmUserPreGsmUser抽象類的特點(diǎn)是一種非完整類,它不能實(shí)例化一個(gè)對(duì)象
抽象類定義時(shí)被關(guān)鍵字abstract修飾。抽象類中不一定擁有抽象方法,但擁有抽象方法的類一定是抽象類。如果抽象類的子類不是抽象的,它必須實(shí)現(xiàn)抽象類中的所有抽象方法。抽象方法
抽象方法是在抽象類中只有方法頭而沒有方法體的方法。例如:
publicabstractbooleandial();
利用抽象方法,抽象類可以提供一個(gè)完整的編程界面,即在抽象類中提供子類中需要實(shí)現(xiàn)的方法的聲明,而將方法的實(shí)現(xiàn)細(xì)節(jié)留給子類實(shí)現(xiàn)。
定義抽象方法時(shí),需要注意:抽象方法必須在抽象類中進(jìn)行定義。不能用關(guān)鍵字abstract來(lái)修飾構(gòu)造方法關(guān)鍵字static和private不能與abstract組合使用。關(guān)鍵字final不能與abstract組合使用。
接口接口(interface)與類相似,它是Java中的一種復(fù)合數(shù)據(jù)類型。界面也稱為一種特殊的、完全沒有實(shí)現(xiàn)的類,
與抽象類不同,接口中定義的所有方法都是抽象方法,并且接口中定義的所有域都是常量。
接口定義的語(yǔ)法如下:[public]interfaceinterfaceName[extendssuperinterface1,superinterface2,…superinterfacen]{//界面體
//域定義
[public][static][final]typeconstName=constValue;//方法定義
[public][abstract]returntype
functionName(pariList)[throws
exceptionList];}包包是一組相關(guān)類和接口的集合。不同于繼承、包含關(guān)系,包內(nèi)的類之間具有松散的使用關(guān)系。可以對(duì)復(fù)雜系統(tǒng)中大量的類和接口進(jìn)方便地、有效的管理,提高了類和接口的安全性,更好地體現(xiàn)類的封裝特性Java中對(duì)包的管理類似于操作系統(tǒng)中對(duì)文件系統(tǒng)的目錄管理。Java中通過(guò)多個(gè)層次的包把各種類文件(后綴為.class的類文件)組織在一起,包的層次在計(jì)算機(jī)中保存為目錄。在包語(yǔ)句中,用圓點(diǎn)(.)指明包的層次。例如,如下的包語(yǔ)句:
packagejava.io.event;
表示java.io.event包內(nèi)的類文件存儲(chǔ)在目錄
…java\awt\event下。包的創(chuàng)建Java中,包的定義用關(guān)鍵字package實(shí)現(xiàn),包定義的語(yǔ)法如下:packagepk1[.pk2[pk3…]]pk1,pk2等為包的名字,方括號(hào)[]中的內(nèi)容是可選的,采用圓點(diǎn)(.)表示包的層次。例:packagemypk;classExtenComputeE{...}classComputeE{...}表示定義了一個(gè)名為mypk的包,它將ExtenComputeE類和ComputeE類都封裝在包mypk中。包的引用1.采用前綴包名法,是在要引用其它的類名前面,添加這個(gè)類所屬的包名和圓點(diǎn)操作符(.)。例如://AcPublicclass.javapublicclassAcPublicclass{publicstaticvoidmain(Stringa[]){
mypack.t.PublicClassm=newmypack.t.PublicClass();//添加包名前綴
pc.changex(2.0f);
System.out.println("pc.i="+pc.i);
pc.i++;
System.out.println("pc.i="+pc.i);}}程序中AcPublicclass,需要使用PublicClass類,在創(chuàng)建該類對(duì)象的時(shí)候,需要使用包名做前綴來(lái)定位PublicClass類。前綴包名法很少使用,一般用來(lái)區(qū)別不同包中的同名類。包的引用2.用引入語(yǔ)句也可以使用其它包中的類,引入語(yǔ)句用關(guān)鍵字import實(shí)現(xiàn),實(shí)現(xiàn)語(yǔ)法如下:importpackageName.Classname;packageName為要引入類所屬包的名字,Classname為類的名字。前面的程序AcPublicclass.java用引入語(yǔ)句實(shí)現(xiàn)如下:importmypack.t.PublicClass;publicclassAcPublicclass{publicstaticvoidmain(Stringa[]){
PublicClasspc=newPublicClass();pc.changex(2.0f);
Sys
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣西2024年12月廣西廣播電視臺(tái)公開招考90名自收自支事業(yè)編制工作人員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 河南南陽(yáng)市2023-2024學(xué)年高三下學(xué)期第三次周考數(shù)學(xué)試題
- 工程結(jié)算實(shí)操篇06課件
- 工程結(jié)算48課件
- 購(gòu)物中心員工服務(wù)態(tài)度與技能培訓(xùn)計(jì)劃
- 建設(shè)工程項(xiàng)目質(zhì)量控制系統(tǒng)的建立田海燕課件
- 5.2《少年當(dāng)自強(qiáng)》教學(xué)設(shè)計(jì)- 2024-2025學(xué)年統(tǒng)編版道德與法治九年級(jí)下冊(cè)
- 小區(qū)改造施工合同范本
- 廣州大學(xué)城練溪展覽中心課件
- 2025青海門源枋正建設(shè)項(xiàng)目管理有限公司招聘工程技術(shù)人員6人筆試參考題庫(kù)附帶答案詳解
- 2025人教版一年級(jí)下冊(cè)數(shù)學(xué)教學(xué)進(jìn)度表
- DeepSeek教案寫作指令
- 2025年安徽省合肥熱電集團(tuán)招聘50人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 休學(xué)復(fù)學(xué)申請(qǐng)書
- 北京2025年02月北京市地質(zhì)礦產(chǎn)勘查院所屬事業(yè)單位公開招考工作人員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- DeepSeek零基礎(chǔ)到精通手冊(cè)(保姆級(jí)教程)
- 瓷磚鋪貼勞務(wù)承包協(xié)議書
- 2025年四川司法警官職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- GB/T 36548-2024電化學(xué)儲(chǔ)能電站接入電網(wǎng)測(cè)試規(guī)程
- 土力學(xué)與地基基礎(chǔ)(課件)
- 建筑公司內(nèi)部管理流程-課件PPT
評(píng)論
0/150
提交評(píng)論