版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四講類對象和接口第一頁,共九十三頁,編輯于2023年,星期五第四講類、對象和接口4.11abstract類和abstract方法4.12super關(guān)鍵字4.13接口4.14內(nèi)部類4.15匿名類4.16異常類4.17Class類4.18基本類型的類包裝4.19反編譯和文檔生成器4.20jar文件第二頁,共九十三頁,編輯于2023年,星期五第四講類、對象和接口
一、教學(xué)目的理解類、對象和接口之間的關(guān)系,熟練掌握類的設(shè)計方法、對象的使用方法,接口的定義方法,熟練運用實例成員和類成員編寫程序,了解包的基本使用方法。二、教學(xué)內(nèi)容:本章主要介紹類和對象之間的關(guān)系,握類的設(shè)計方法、對象的使用方法,以及包的基本使用方法。第三頁,共九十三頁,編輯于2023年,星期五第四講類、對象和接口三、重點及難點內(nèi)容:重點:1、仔細體會面向?qū)ο缶幊痰乃枷耄?、熟練理解類和對象的概念,理解面向?qū)ο蟮奶匦裕?、會編寫簡單的類,逐漸掌握面向?qū)ο缶幊痰姆椒?。四、難點:面向?qū)ο缶幊趟枷氲慕ⅰ5谒捻?,共九十三頁,編輯?023年,星期五第四講類、對象和接口四、課前思考1、什么是對象?什么是類?2、面向?qū)ο缶幊痰奶匦杂心娜齻€?它們各自又有哪些特性?3、你知道java語言在面向?qū)ο缶幊谭矫嬗泻为毺氐奶攸c嗎?第五頁,共九十三頁,編輯于2023年,星期五4.1編程語言的幾個發(fā)展階段1、機器語言(匯編語言)計算機處理信息的早期語言是所謂的機器語言,這種語言中的指令都是由0,1組成的序列,稱這樣的序列為一條機器指令。
2、過程語言(C語言)面向過程語言把代碼組成叫做過程或函數(shù)的塊。每個塊的目標(biāo)是完成某個任務(wù),例如,一個C的源程序就是由若干個書寫形式互相獨立的函數(shù)組成。3、面向?qū)ο笳Z言(JAVA,C++)面向?qū)ο缶幊谈先说乃季S模式,主要體現(xiàn)在以下三個特性上。第六頁,共九十三頁,編輯于2023年,星期五4.1編程語言的幾個發(fā)展階段1)封裝性封裝是面向?qū)ο缶幊痰暮诵乃枷胫?,就是將?shù)據(jù)和對數(shù)據(jù)的操作封裝在一起,也就是一個對象將自己的數(shù)據(jù)和對這些數(shù)據(jù)的操作合理有效地封裝在一起。封裝將類的外部界面與類的功能實現(xiàn)區(qū)分開來,隱藏實現(xiàn)細節(jié),(通過公共方法)保留有限的對外接口,迫使用戶使用外部界面,通過訪問接口實現(xiàn)對數(shù)據(jù)的操作。即使實現(xiàn)細節(jié)發(fā)生了改變,也還可通過界面承擔(dān)其功能而保留原樣,確保調(diào)用它的代碼還繼續(xù)工作。這使代碼維護更簡單。第七頁,共九十三頁,編輯于2023年,星期五4.1編程語言的幾個發(fā)展階段
2)繼承3)多態(tài)多態(tài)是面向?qū)ο缶幊痰挠幸粋€重要特征。多態(tài)有兩種含義:一種是:操作名稱的多態(tài),即有多個操作具有相同的名字,但這些操作所接收的消息類型必須不同(在JAVA中體現(xiàn)在方法重載上)。另一種:是和繼承有關(guān)的多態(tài),是指同一個操作被不同類型對象調(diào)用時可能產(chǎn)生不同的行為。例如:狗和貓都喊叫,狗發(fā)出的是“汪汪…”而貓是“喵喵…”(在JAVA中體現(xiàn)在覆蓋上)。第八頁,共九十三頁,編輯于2023年,星期五4.2類類是Java的核心,也是類是組成Java程序的基本要素。類封裝了一類對象的狀態(tài)和方法。類是用來定義對象的模板。類是對具有相同屬性和方法的一組相似對象的抽象,或者說類是對象的模板。類的實現(xiàn)包括兩部分:類聲明和類體。第九頁,共九十三頁,編輯于2023年,星期五4.2類1、類聲明
類的聲明格式如下: [修飾符]class<類名>[extends父類名][implements接口名]{ 類主體 }classPeople{
…}
第十頁,共九十三頁,編輯于2023年,星期五4.2類2、類體1)寫類的目的是為了描述一類事物共有的屬性和功能,描述過程由類體來實現(xiàn)。類聲明之后的一對大括號“{”,“}”以及它們之間的內(nèi)容稱做類體,大括號之間的內(nèi)容稱做類體的內(nèi)容。2)類體的內(nèi)容由兩部分構(gòu):一部分是變量的定義,用來刻畫屬性;另一部分是方法的定義,用來刻畫功能。第十一頁,共九十三頁,編輯于2023年,星期五4.2類3)聲明成員變量的格式為: [修飾符]<變量類型><變量名> 聲明成員方法的格式為: <修飾符><返回值類型><方法名>([參數(shù)列表])[throws<exception>] { 方法體 }第十二頁,共九十三頁,編輯于2023年,星期五4.2類class梯形{float上底,下底,高,laderArea;//變量定義部分float計算面積()//方法定義{laderArea=(上底+下底)*高/2.0f;returnladerArea;}void修改高(floath)//方法定義{高=h;}}第十三頁,共九十三頁,編輯于2023年,星期五4.2類3、成員變量和局部變量
1)我們已經(jīng)知道類體分為兩部分。變量定義部分所定義的變量被稱為類的成員變量。在方法體中定義的變量和方法的參數(shù)被稱為局部變量。2)成員變量在整個類內(nèi)都有效,局部變量只在定義它的方法內(nèi)有效。3)成員變量又分為實例成員變量(簡稱實例變量)和類變量(也稱靜態(tài)變量)。如果成員變量的類型前面加上關(guān)鍵字static,這樣的成員變量稱做是類變量或靜態(tài)變量。
第十四頁,共九十三頁,編輯于2023年,星期五4.2類
4)如果局部變量的名字與成員變量的名字相同,則成員變量被隱藏,即這個成員變量在這個方法內(nèi)暫時失效。5)如果局部變量的名字與成員變量的名字相同,則成員變量被隱藏。這時如果想在該方法內(nèi)使用成員變量,必須使用關(guān)鍵字this。
第十五頁,共九十三頁,編輯于2023年,星期五4.2類
4、方法方法的定義包括兩部分:方法聲明和方法體。一般格式為: 方法聲明部分 { 方法體內(nèi)容 }1)方法聲明最基本的方法聲明包括方法名和方法類型。當(dāng)方法不需要返回數(shù)據(jù)時,方法的類型必須是void。第十六頁,共九十三頁,編輯于2023年,星期五4.2類2)方法體
方法聲明之后的一對大括號以及之間的內(nèi)容成為方法的方法體。方法體的內(nèi)容包括局部變量的定義和合法的Java語言。3)方法參數(shù)在整個方法內(nèi)有效,方法內(nèi)定義的局部變量從它定義的位置之后開始有效。如果局部變量的定義是在一個復(fù)合語句中,那么該局部變量的有效范圍是該復(fù)合語句,即僅在該復(fù)合語句中有效,如果局部變量的定義是在一個循環(huán)語句中,那么該局部變量的有效范圍是該循環(huán)語句,即僅在該循環(huán)語句中有效。第十七頁,共九十三頁,編輯于2023年,星期五4.2類5、方法重載方法重載的意思是:一個類中可以有多個方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個數(shù)不同,或者是參數(shù)的類型不同。重載是Java實現(xiàn)多態(tài)性的一種方式。
有兩個規(guī)則適用于重載方法:
①調(diào)用語句的參數(shù)表必須有足夠的不同,以至于允許區(qū)分出正確的方法被調(diào)用。
②方法的返回類型可以各不相同,但它不足以使返回類型變成唯一的差異。重載方法的參數(shù)表必須不同。第十八頁,共九十三頁,編輯于2023年,星期五classArea{floatgetArea(floatr){return3.14f*r*r;}doublegetArea(floatx,inty){returnx*y;}floatgetArea(intx,floaty){returnx*y;}doublegetArea(floatx,floaty,floatz){return(x*x+y*y+z*z)*2.0;}}第十九頁,共九十三頁,編輯于2023年,星期五4.2類6、構(gòu)造方法
1)構(gòu)造方法是一種特殊方法,用來對對象進行初始化。
2)它的名字必須與它所在的類的名字完全相同,而且沒有類型,甚至連表示無返回值的空類型(void)也沒有。構(gòu)造方法一般應(yīng)定義為public構(gòu)造方法也可以重載
3)一般而言,每個類都至少有一個構(gòu)造函數(shù)。如果程序員沒有為類定義構(gòu)造函數(shù),Java虛擬機會自動為該類生成一個默認的構(gòu)造函數(shù)。
4)要特別注意的是,如果程序員定義了一個或多個構(gòu)造函數(shù),則自動屏蔽掉默認的構(gòu)造函數(shù)。(詳見例程)第二十頁,共九十三頁,編輯于2023年,星期五5)構(gòu)造方法重載示例
publicclassEmployee{ privateStringname; privateintsalary;
publicEmployee(Stringn,ints)
{ name=n; salary=s; }
publicEmployee(Stringn)
{ this(n,0); }
publicEmployee()
{ this("Unknown");} }第二十一頁,共九十三頁,編輯于2023年,星期五4.2類7、類方法和實例方法說明:
1)類中的方法分為實例方法和類方法。
2)方法聲明時,方法類型前面不加關(guān)鍵字static的是實例方法、加關(guān)鍵字static的是類方法。
3)構(gòu)造方法是特殊的方法,不能用static修飾構(gòu)造方法。
4)實例方法既能對類變量操作也能對實例變量操作,而類方法只能對類變量進行操作。
5)一個類中的方法可以互相調(diào)用,實例方法可以調(diào)用該類中的其他方法;類方法只能調(diào)用類方法,不能調(diào)用實例方法。第二十二頁,共九十三頁,編輯于2023年,星期五4.3對象
類是創(chuàng)建對象的模板。當(dāng)使用一個類創(chuàng)建了一個對象時,我們也說我們給出了這個類的一個實例。1、創(chuàng)建對象創(chuàng)建一個對象包括對象的聲明和為對象分配內(nèi)存兩個步驟。(1)對象的聲明。一般格式為:類的名字對象名字;如:
PeoplezhangPing;第二十三頁,共九十三頁,編輯于2023年,星期五4.3對象(2)為聲明的對象分配內(nèi)存使用new運算符和類的構(gòu)造方法為聲明的對象分配內(nèi)存,如果類中沒有構(gòu)造方法,系統(tǒng)會調(diào)用默認的構(gòu)造方法(默認的構(gòu)造方法是無參數(shù)的)。如:
zhangPing=newPeople();
(3)對象的內(nèi)存模型
見下例:第二十四頁,共九十三頁,編輯于2023年,星期五classXiyoujiRenwu{floatheight,weight;Stringhead,ear,hand,foot,mouth;voidspeak(Strings){System.out.println(s);}}classA{publicstaticvoidmain(Stringargs[]){XiyoujiRenwuzhubajie;//聲明對象zhubajie=newXiyoujiRenwu();//為對象分//配內(nèi)存,使用new運算符和默認的構(gòu)造方法}}第二十五頁,共九十三頁,編輯于2023年,星期五4.3對象當(dāng)用XiyoujiRenwu類聲明一個變量,即對象zhubajie時,對象時的內(nèi)存模型如下:
XiyoujiRenwuzhubajie;第二十六頁,共九十三頁,編輯于2023年,星期五4.3對象當(dāng)系統(tǒng)見到:zhubajie=newXiyoujiRenwu();時,就會做兩件事:①為height,weight,head,ear,mouth,hand,foot各個變量分配內(nèi)存,即XiyoujiRenwu類的成員變量被分配內(nèi)存空間,然后執(zhí)行構(gòu)造方法中的語句。②new運算符在為變量height,weight,head,ear,mouth,hand,foot分配內(nèi)存后,將返回一個引用給對象變量zhubajie(分配實體后的內(nèi)存模型如下:)。第二十七頁,共九十三頁,編輯于2023年,星期五4.3對象第二十八頁,共九十三頁,編輯于2023年,星期五4.3對象2、對象的使用
1)對象不僅可以操作自己的變量改變狀態(tài),而且還擁有了使用創(chuàng)建它的那個類中的方法的能力,對象通過使用這些方法可以產(chǎn)生一定的行為。2)通過使用運算符“.”,對象可以實現(xiàn)對自己的變量訪問和方法的調(diào)用。3)當(dāng)對象調(diào)用方法時,方法中出現(xiàn)的成員變量就是指該對象的成員變量(見例4.3)。
對象名.成員變量名 對象名.成員方法名([<參數(shù)列表>])第二十九頁,共九十三頁,編輯于2023年,星期五4.3對象3、對象的引用和實體
1)當(dāng)用類創(chuàng)建一個對象時,類中的成員變量被分配內(nèi)存空間,這些內(nèi)存空間稱做該對象的實體,而對象中存放著引用,以確保實體由該對象操作使用。2)一個類創(chuàng)建的兩個對象,如果具有相同的引用,那么就具有完全相同的實體。3)沒有實體的對象稱作空對象,空對象不能使用,即不能讓一個空對象去調(diào)用方法產(chǎn)生行為。第三十頁,共九十三頁,編輯于2023年,星期五4.3對象第三十一頁,共九十三頁,編輯于2023年,星期五4.3對象第三十二頁,共九十三頁,編輯于2023年,星期五4.3對象4、參數(shù)傳值
在Java語言中,向方法傳遞參數(shù)的方式是“按值傳遞”。按值傳遞意味著當(dāng)將一個參數(shù)傳遞給一個方法時,首先創(chuàng)建了源參數(shù)的一個副本并將這個副本傳入了方法,這樣方法接收的是原始值的一個副本。因此,即使在方法中修改了該參數(shù),那僅僅是改變副本,而源參數(shù)值保持不變。1)基本數(shù)據(jù)類型參數(shù)的傳值
對于基本數(shù)據(jù)類型的參數(shù),向該參數(shù)傳遞的值的級別不可以高于該參數(shù)的級別,比如,不可以向int型參數(shù)傳遞一個float值,但可以向double型參數(shù)傳遞一個float值。第三十三頁,共九十三頁,編輯于2023年,星期五4.3對象2)引用類型參數(shù)的傳值
Java的引用型數(shù)據(jù)包括對象、數(shù)組和接口。當(dāng)參數(shù)是引用類型時,“傳值”傳遞的是變量的引用而不是變量所引用的實體。當(dāng)使用對象實例作為參數(shù)傳遞給方法時,參數(shù)的值是對對象的引用。也就是說,傳遞給到方法內(nèi)部的是對象的引用值而不是對象的內(nèi)容。 在方法內(nèi)這個引用值不會被改變。但如果通過該引用值修改了所指向的對象的內(nèi)容,則方法結(jié)束后,所修改的對象內(nèi)容可以保留下來。(詳見例程和課本例4.5)第三十四頁,共九十三頁,編輯于2023年,星期五4.4static關(guān)鍵字
在一個類中,使用static修飾的變量和方法分別稱為類變量(或稱靜態(tài)變量)和類方法(或稱靜態(tài)方法),沒有使用static修飾的變量和方法分別稱為實例變量和實例方法。
1、實例變量和類變量的區(qū)別
一個類通過使用new運算符可以創(chuàng)建多個不同的對象,不同的對象的實例變量將被分配不同的內(nèi)存空間,如果類中的成員變量有類變量,那么所有的對象的這個類變量都分配給相同的一處內(nèi)存,改變其中一個對象的這個類變量會影響其它對象的這個類變量。
第三十五頁,共九十三頁,編輯于2023年,星期五4.4static關(guān)鍵字
類變量是和該類創(chuàng)建的所有對象相關(guān)聯(lián)的變量,改變其中一個對象的這個類變量就同時改變了其它對象的這個類變量。因此,類變量不僅可以通過某個對象訪問也可以直接通過類名訪問。實例變量僅僅是和相應(yīng)的對象關(guān)聯(lián)的變量,也就是說,不同對象的實例變量互不相同,即分配不同的內(nèi)存空間,改變其中一個對象的實例變量不會影響其它對象的這個實例變量。實例變量可以通過對象訪問,不能使用類名訪問。
第三十六頁,共九十三頁,編輯于2023年,星期五4.4static關(guān)鍵字
2、實例方法和類方法的區(qū)別
實例方法可以被類創(chuàng)建的任何對象調(diào)用執(zhí)行。而類方法不僅可以被類創(chuàng)建的任何對象調(diào)用執(zhí)行,也可以直接通過類名調(diào)用。
總結(jié):
1、類成員屬于這個類而不是屬于這個類的某個對象。第三十七頁,共九十三頁,編輯于2023年,星期五4.4static關(guān)鍵字2、對于類成員,既可以使用對象進行訪問,也可以使用類名直接進行訪問,并且在類方法中只能訪問類成員,而不能訪問實例成員。
3、實例成員由每一個對象個體獨有,對象的存儲空間中的確有一塊空間用來存儲該成員。對于實例成員,只能通過對象來訪問,不能通過類名進行訪問。
4、在實例方法中,既可以訪問實例成員,也可以訪問類成員。第三十八頁,共九十三頁,編輯于2023年,星期五4.5this關(guān)鍵字
有關(guān)this的幾點描述:
1)this是Java的一個關(guān)鍵字,表示某個對象。
2)this可以出現(xiàn)在實例方法和構(gòu)造方法中,但不可以出現(xiàn)在類方法中。
3)this關(guān)鍵字出現(xiàn)在類的構(gòu)造方法中時,代表使用該構(gòu)造方法所創(chuàng)建的對象。
4)this關(guān)鍵字出現(xiàn)在類的實例方法中時,代表正在調(diào)用該方法的當(dāng)前對象。第三十九頁,共九十三頁,編輯于2023年,星期五4.5this關(guān)鍵字5)需要注意的是,當(dāng)一個變量被聲明為static時,是不能用this來指向的,因為this指向某一具體對象,不能用來指示類本身。6)this還可以用在某個構(gòu)造函數(shù)的第一句,用來調(diào)用該類的另一個構(gòu)造函數(shù)。第四十頁,共九十三頁,編輯于2023年,星期五4.6包
1、包語句
1)包的概念包:是Java提供的文件組織方式。為了便于管理大型軟件系統(tǒng)中數(shù)目眾多的類,解決類命名沖突的問題,Java引入了包(package)。一個包中可以包括很多類文件,包中還可以有子包,形成包等級。使用包不僅方便了類文件的管理,而且擴大了Java命名空間。第四十一頁,共九十三頁,編輯于2023年,星期五4.6包2)包的創(chuàng)建創(chuàng)建包的語法格式為:
Package<包名>;
例如:packagemyPackage;也可以創(chuàng)建包的層次。例如:packagemyPackage.secondPackage;第四十二頁,共九十三頁,編輯于2023年,星期五4.6包3)package語句的進一步說明(1)package語句必須是文件中的第一條語句。也就是說,在package語句之前,除了空白和注釋之外不能有任何語句。(2)如果不加package語句,則指定為缺省包或無名包。(3)包對應(yīng)著文件系統(tǒng)的目錄層次結(jié)構(gòu)。(4)在package語句中,用“.”來指明包(目錄)的層次。第四十三頁,共九十三頁,編輯于2023年,星期五4.6包例:packagemyPackage;publicclassHelloWorld{ publicstaticvoidmain(String[]args){ System.out.print("HelloWorld!"); }}第四十四頁,共九十三頁,編輯于2023年,星期五4.6包2、import語句
在編寫源文件時,除了自己編寫類外,我們經(jīng)常需要使用Java提供的許多類,這些類可能在不同的包中,而使用import語句可以引入包中的類。import語句的使用方式如下:1)引入包中的類。 importjava.io.File; 2)引入整個包。 importjava.io.*; 3)在同一包中的類可以互相引用,無需import語句。
第四十五頁,共九十三頁,編輯于2023年,星期五4.7訪問權(quán)限1、訪問控制修飾符簡介
訪問控制修飾符說明類或類的成員的可訪問范圍。1)public用public修飾的類或成員擁有公共作用域,表明此類或類的成員可以被任何Java中的類所訪問,是最廣泛的作用范圍。2)protected用protected修飾的變量或方法擁有受保護作用域,可以被同一個包中所有的類及其他包中該類的子類所訪問。第四十六頁,共九十三頁,編輯于2023年,星期五4.7訪問權(quán)限3)private用private修飾的變量或方法擁有私有作用域,只能在此類中訪問,在其他類中,包括該類的子類中也是不允許訪問的,private是最保守的作用范圍。4)friendly(默認)沒有使用任何修飾符的,擁有默認訪問權(quán)限(也稱友好訪問權(quán)限),表明此類或類的成員可以被同一個包中的其它類訪問。第四十七頁,共九十三頁,編輯于2023年,星期五4.7訪問權(quán)限2、私有變量和私有方法一個類在另外一個類中創(chuàng)建一個對象后,該對象不能訪問自己的私有變量和私有方法對于一個類的私有類變量(靜態(tài)成員變量),那么在另外一個類中,也不能通過類名來操作這個私有類變量。對于私有成員變量或方法,只有在本類中創(chuàng)建該類的對象時,這個對象才能訪問自己的私有成員變量和類的私有方法。第四十八頁,共九十三頁,編輯于2023年,星期五4.7訪問權(quán)限
3、共(公)有變量和共(公)有方法
一個類在另外一個類中創(chuàng)建一個對象后,該對象能訪問自己的public變量和public方法。對于一個類的public類變量(靜態(tài)成員變量),那么在另外一個類中,也能通過類名來操作這個public類變量。
第四十九頁,共九十三頁,編輯于2023年,星期五4.7訪問權(quán)限
4、友好變量和友好方法
不用private、public、protected修飾符的成員變量和方法被稱為友好變量和友好方法。一個類在另外一個類中創(chuàng)建一個對象后,如果兩個類在同一包中,該對象能訪問自己的友好變量和友好方法。對于一個類的友好類變量(靜態(tài)成員變量),如果兩個類在同一包中,那么在另外一個類中,也能通過類名來操作這個友好類變量。第五十頁,共九十三頁,編輯于2023年,星期五4.7訪問權(quán)限
5、受保護的成員變量和方法
一個類在另外一個類中創(chuàng)建一個對象后,如果兩個類在同一包中,該對象能訪問自己的protected變量和protected方法。對于一個類的protected類變量(靜態(tài)成員變量),如果兩個類在同一包中,那么在另外一個類中,也能通過類名來操作這個protected類變量。第五十一頁,共九十三頁,編輯于2023年,星期五4.8類的繼承
繼承:是存在于面向?qū)ο蟪绦蛑械膬蓚€類之間的一種關(guān)系。當(dāng)一個類A能夠獲取另一個類B中所有非私有的數(shù)據(jù)和操作的定義作為自己的部分或全部成分時,就稱這兩個類之間具有繼承關(guān)系。被繼承的類B稱為父類或超類,繼承了父類或超類的數(shù)據(jù)和操作的類A稱為子類。第五十二頁,共九十三頁,編輯于2023年,星期五4.8類的繼承
一個父類可以同時擁有多個子類,這時這個父類實際上是所有子類的公共域和公共方法的集合,而每一子類則是父類的特殊化,是在父類的基礎(chǔ)之上對公共域和方法在功能、內(nèi)涵方面的擴展和延伸。 使用繼承具有以下的好處:降低代碼編寫中的冗余度,更好地實現(xiàn)了代碼復(fù)用的功能,提高程序編寫的效率。由于降低了代碼的冗余度,使得程序在維護時就變得非常的方便。
第五十三頁,共九十三頁,編輯于2023年,星期五4.8類的繼承
1、子類
在類的聲明中,通過使用關(guān)鍵字extends來創(chuàng)建一個類的子類,格式如下:
class子類名extends父類名 {… } 例如: classStudentsextendsPeople {…
}第五十四頁,共九十三頁,編輯于2023年,星期五4.8類的繼承
2、子類的繼承
類可以有兩種重要的成員:成員變量和方法。子類的成員中有一部分是子類自己聲明定義的,另一部分是從它的父類繼承的。所謂子類繼承父類的成員變量作為自己的一個成員變量,就好象它們是在子類中直接聲明一樣,可以被子類中自己聲明的任何實例方法操作。所謂子類繼承父類的方法作為子類中的一個方法,就象它們是在子類中直接聲明一樣,可以被子類中自己聲明的任何實例方法調(diào)用。第五十五頁,共九十三頁,編輯于2023年,星期五4.8類的繼承
類中繼承的實現(xiàn)主要有以下幾個步驟: ①確定父類。 ②定義子類。它的具體語法是: [類修飾符]class子類名extends父類名 ③實現(xiàn)子類的功能。
第五十六頁,共九十三頁,編輯于2023年,星期五classA{publicinta1;privatefloata2;intgetA(){return(a1);}voidsetA(){}}classBextendsA{intb1;Stringb2;StringgetB(){return(b2);}}classCextendsB
{intc;intprintC(){System.out.println(c);}}第五十七頁,共九十三頁,編輯于2023年,星期五4.8類的繼承
1)子類和父類在同一包中的繼承性
如果子類和父類在同一個包中,那么,子類自然地繼承了其父類中不是private的成員變量作為自己的成員變量,并且也自然地繼承了父類中不是private的方法作為自己的方法,繼承的成員或方法的訪問權(quán)限保持不變。
第五十八頁,共九十三頁,編輯于2023年,星期五4.8類的繼承
2)子類和父類不在同一包中的繼承性
如果子類和父類不在同一個包中,那么,子類繼承了父類的protected、public成員變量做為子類的成員變量,并且繼承了父類的protected、public方法為子類的方法,繼承的成員或方法的訪問權(quán)限保持不變。如果子類和父類不在同一個包里,子類不能繼承父類的友好變量和友好方法。第五十九頁,共九十三頁,編輯于2023年,星期五4.8類的繼承
3、成員變量的隱藏和方法的重寫
1)隱藏:只要子類中定義的成員變量和父類中的成員變量同名時,子類就隱藏了繼承的成員變量。
2)重寫(覆蓋):指子類中定義一個方法,并且這個方法的名字、返回類型、參數(shù)個數(shù)和類型與從父類繼承的方法完全相同。
3)覆蓋的實現(xiàn):就是在子類中對需要覆蓋的父類成員以父類中相同的格式再重新聲明定義一次。這樣就完成了對父類成員的覆蓋。它是一種很重要的多態(tài)形式。第六十頁,共九十三頁,編輯于2023年,星期五4.8類的繼承
4)被覆蓋的成員的使用
(1)域變量的使用
當(dāng)子類重新定義一個與從父類那里繼承來的完全相同的屬性變量時,子類就隱藏了父類的該變量(稱為域變量的隱藏)。對于域變量的隱藏來說,父類定義的域變量在子類對象實例化時仍然分配一個存儲空間。
當(dāng)子類執(zhí)行繼承自父類的操作時,處理的是繼承自父類的變量,而當(dāng)子類執(zhí)行它自己定義的方法時,所操作的就是它自己定義的變量,而把繼承自父類的變量“隱藏”起來。第六十一頁,共九十三頁,編輯于2023年,星期五4.8類的繼承
(2)方法的使用
當(dāng)子類重新定義與父類同名的方法時,就實現(xiàn)了對父類方法的覆蓋(Overload)。 方法的覆蓋與域的隱藏的不同之處在于:子類隱藏父類的域只是使之不可見,父類的同名域在子類對象中仍然占有自己的獨立內(nèi)存空間;而子類方法對父類同名方法的覆蓋將清除父類方法占用的內(nèi)存空間,從而使父類方法在子類對象中不復(fù)存在。第六十二頁,共九十三頁,編輯于2023年,星期五4.8類的繼承
方法的覆蓋中需要注意的問題是:子類在重新定義父類已有的方法時,應(yīng)保持與父類完全相同的方法頭聲明,即應(yīng)與父類有完全相同的方法名、返回值和參數(shù)列表。否則就不是方法的覆蓋,而是子類定義自己的與父類無關(guān)的方法,父類的方法未被覆蓋,所以仍然存在。第六十三頁,共九十三頁,編輯于2023年,星期五4.8類的繼承4、fianl關(guān)鍵字
1)final關(guān)鍵子可以修飾類、成員變量和方法中的參數(shù)。
2)final類不能被繼承,即不能有子類。
3)如果一個方法被修飾為final方法,則這個方法不能被重寫。
4)如果一個成員變量被修飾為final的,就是常量,常量必須賦給初值,而且不能再發(fā)生變化。
5)如果方法的參數(shù)被修飾為final的,該參數(shù)的值不能被改變。第六十四頁,共九十三頁,編輯于2023年,星期五4.9對象的上轉(zhuǎn)型對象
1)假設(shè)B類是A類子類或間接子類,當(dāng)我們用子類B創(chuàng)建一個對象,并把這個對象的引用放到A類的對象中時: Aa; Bb=newB(); a=b; 稱這個A類對象:a,是子類對象b的上轉(zhuǎn)型對象。 2)對象的上轉(zhuǎn)型對象的實體是子類負責(zé)創(chuàng)建的,但上轉(zhuǎn)型對象會失去原子類對象的一些屬性和功能。第六十五頁,共九十三頁,編輯于2023年,星期五4.9對象的上轉(zhuǎn)型對象3)上轉(zhuǎn)對象不能操作子類新增的成員變量(失掉了這部分屬性);不能使用子類新增的方法(失掉了一些功能)。4)上轉(zhuǎn)型對象可以操作子類繼承或隱藏成員變量,也可以使用子類繼承的或重寫的方法。5)上轉(zhuǎn)型對象操作子類繼承或重寫的方法時,就是通知對應(yīng)的子類對象去調(diào)用這些方法。因此,如果子類重寫了父類的某個方法后,對象的上轉(zhuǎn)型對象調(diào)用這個方法時,一定是調(diào)用了這個重寫的方法。6)可以將對象的上轉(zhuǎn)型對象再強制轉(zhuǎn)換到一個子類對象,這時,該子類對象又具備了子類所有屬性和功能。第六十六頁,共九十三頁,編輯于2023年,星期五4.10多態(tài)性1、多態(tài)的概念多態(tài):是指一個程序中同名的不同方法共存的情況。
2、實現(xiàn)多態(tài)的方法
1)通過子類對父類成員的覆蓋實現(xiàn)多態(tài)。
2)利用重載在同一個類中定義多個同名的不同方法實現(xiàn)多態(tài)。第六十七頁,共九十三頁,編輯于2023年,星期五4.11abstract類和abstract方法1、抽象類和抽象方法
1)抽象類(1)定義:在Java中,凡是用abstract修飾符修飾的類稱為抽象類。(2)格式: 定義一個抽象類的格式如下: abstractclassClassName { .......//類的主體部分 }第六十八頁,共九十三頁,編輯于2023年,星期五4.11abstract類和abstract方法2)抽象方法(1)定義:在Java中,凡是用abstract修飾符修飾的方法稱為抽象方法。(2)格式: 定義一個抽象方法的格式如下: abstractpublic方法名(參數(shù)列表);
第六十九頁,共九十三頁,編輯于2023年,星期五4.11abstract類和abstract方法2、抽象類和一般類的區(qū)別
①如果一個類中含有未實現(xiàn)的抽象方法,那么這個類就必須通過關(guān)鍵字abstract進行標(biāo)記聲明為抽象類。 ②抽象類中可以包含抽象方法,但不是一定要包含抽象方法。它也可以包含非抽象方法和域變量,就像一般類一樣。 ③抽象類是沒有具體對象的概念類,也就是說抽象類不能實例化為對象。 ④抽象類必須被繼承。子類為它們父類中的所有抽象方法提供實現(xiàn),否則它們也是抽象類。第七十頁,共九十三頁,編輯于2023年,星期五4.11abstract類和abstract方法
和普通的類相比,abstract類可以有abstract方法。對于abstract方法,只允許聲明,不允許實現(xiàn),而且不允許使用final修飾abstract方法。 abstractclassA { abstractintmin(intx,inty); intmax(intx,inty) { returnx>y?x:y; } }第七十一頁,共九十三頁,編輯于2023年,星期五4.11abstract類和abstract方法
3、abstract類不能用new運算創(chuàng)建對象
對于abstract類,我們不能使用new運算符創(chuàng)建該類的對象,需產(chǎn)生其子類,由子類創(chuàng)建對象,如果一個類是abstract類的子類,它必須具體實現(xiàn)父類的abstract方法,這就是為什么不允許使用final修飾abstract方法的原因。一個abstract類只關(guān)心它的子類是否具有某種功能,并不關(guān)心功能的具體行為,功能的具體行為由子類負責(zé)實現(xiàn)。第七十二頁,共九十三頁,編輯于2023年,星期五4.12super關(guān)鍵字Super關(guān)鍵字主要是用來調(diào)用父類的成員變量和方法的。1、使用關(guān)鍵字super調(diào)用父類的構(gòu)造方法Java中子類不繼承父類的構(gòu)造方法,因此,子類如果想使用父類的構(gòu)造方法,必須且必須使用關(guān)鍵字super來表示,而且super必須是子類構(gòu)造方法中的頭一條語句。如:classA{super();
…}第七十三頁,共九十三頁,編輯于2023年,星期五4.12super關(guān)鍵字2、使用關(guān)鍵字super操作被隱藏的成員變量和方法如果我們在子類中想使用被子類隱藏了的父類的成員變量或方法就可以使用關(guān)鍵字super。比如:super.x,super.play()第七十四頁,共九十三頁,編輯于2023年,星期五4.13接口接口的引入可以克服單繼承的缺點,一個類可以實現(xiàn)多個接口。1、接口的聲明與使用
1)接口聲明格式:[public]interface接口名[extends父接口名列表]2)接口體接口體中包含常量定義和方法定義兩部分。接口體中只進行方法的聲明,不許提供方法的實現(xiàn),所以,方法的定義沒有方法體,且用分號“;”結(jié)尾。如:第七十五頁,共九十三頁,編輯于2023年,星期五4.13接口
interfacePrintable {finalintMAX=100; voidadd(); floatsum(floatx,floaty); }3)接口的使用
一個類通過使用關(guān)鍵字implements聲明自己使用一個或多個接口。如果使用多個接口,用逗號隔開接口名。如:classAimplementsPrintable,Addable第七十六頁,共九十三頁,編輯于2023年,星期五4.13接口
如果一個類使用了某個接口,那么這個類必須實現(xiàn)該接口的所有方法,即為這些方法提供方法體,但在類中實現(xiàn)接口的方法時,方法的名字、返回類型、參數(shù)個數(shù)及類型必須與接口中的完全一致。接口實現(xiàn)時必須給出方法體,且一定要用public來修飾。
2、理解接口接口的思想在于它可以增加很多類都需要實現(xiàn)的功能,使用相同的接口類不一定有繼承關(guān)系。同一個類也可以實現(xiàn)多個接口。接口只關(guān)心功能,并不關(guān)心功能的具體實現(xiàn)。第七十七頁,共九十三頁,編輯于2023年,星期五4.13接口①在Java中接口是一種專門的類型。用interface關(guān)鍵字定義接口。②接口中只能定義抽象方法,不能有方法體,一定是public修飾的。③接口中可以定義變量,但實際上是staticfinal修飾的常量。④接口中不能定義靜態(tài)方法,接口不能包含任何可以執(zhí)行的方法,而抽象類可以。⑤類可以實現(xiàn)多個接口,但只有一個父類。⑥接口不是類分級結(jié)構(gòu)的一部分,而沒有聯(lián)系的類可以執(zhí)行相同的接口。第七十八頁,共九十三頁,編輯于2023年,星期五4.13接口
3、接口回調(diào)接口回調(diào)是指:可以把實現(xiàn)某一接口的類創(chuàng)建的對象的引用賦給該接口聲明的接口變量中。那么該接口變量就可以調(diào)用被類實現(xiàn)的接口中的方法。實際上,當(dāng)接口變量調(diào)用被類實現(xiàn)的接口中的方法時,就是通知相應(yīng)的對象調(diào)用接口的方法。 4、接口做參數(shù)
一個方法的參數(shù)是接口類型,就可以將任何實現(xiàn)該接口的類的實例的引用傳遞給該接口參數(shù),接口參數(shù)就可以回調(diào)類實現(xiàn)的接口方法。第七十九頁,共九十三頁,編輯于2023年,星期五4.13接口
一個類要實現(xiàn)接口時,請注意以下問題: ①在類的聲明部分,用implements關(guān)鍵字聲明該類將要實現(xiàn)哪些接口。②如果實現(xiàn)某接口的類不是abstract抽象類,則在類的定義部分必須實現(xiàn)指定接口的所有抽象方法。③如果實現(xiàn)某接口的的類是abstract的抽象類,則它可以不實現(xiàn)該接口所有的方法。但是對于這個抽象類任何一個非抽象的子類而言,它第八十頁,共九十三頁,編輯于2023年,星期五4.13接口們父類所實現(xiàn)的接口中的所有抽象方法都必須有實在的方法體。④—個類在實現(xiàn)某接口的抽象方法時,必須使用完全相同方法頭。如果所實現(xiàn)的方法與抽象方法有相同的方法名和不同的參數(shù)列表,則只是在重載一個新的方法,而不是實現(xiàn)已有的抽象方法。⑤接口的抽象方法的訪問限制符都已制定為public,所以類在實現(xiàn)方法時,必須顯式地使用public修飾符,否則將被系統(tǒng)警告為縮小了接口中定義的方法的訪問控制范圍。第八十一頁,共九十三頁,編輯于2023年,星期五4.14內(nèi)部類
Java支持在一個類中聲明另一個類,這樣的類稱作內(nèi)部類,而包含內(nèi)部類的類成為內(nèi)部類的外嵌類。內(nèi)部類的類體中不可以聲明類(靜態(tài)的)變量和類(靜態(tài)的)方法。外嵌類的類體中可以用內(nèi)部類聲明對象,作為外嵌類的成員。
第八十二頁,共九十三頁,編輯于2023年,星期五4.15匿名類 1、和類有關(guān)的匿名類當(dāng)使用類創(chuàng)建對象時,程序允許我們把類體與對象的創(chuàng)建組合在一起,也就是說,類創(chuàng)建對象時,除了構(gòu)造方法還有類體,此類體被認為是該類的一個子類去掉類聲明后的類體,稱作匿名類。
2、和接口有關(guān)的匿名類Java允許直接用接口名和一個類體創(chuàng)建一個匿名對象,此類體被認為是實現(xiàn)了接口的類去掉類聲明后的類體,稱作匿名類。第八十三頁,共九十三頁,編輯于2023年,星期五第八十四頁,共九十三頁,編輯于2023年,星期五4.16異常類因為重要:單獨講第八十五頁,共九十三頁,編輯于2023年,星期五4.17Class類
1、獲取類的有關(guān)信息
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工作心得體會總結(jié)
- 2025年度典當(dāng)物品鑒定與拍賣代理服務(wù)合同3篇
- 二零二五年度軍事通信保密協(xié)議及網(wǎng)絡(luò)維護合同3篇
- 二零二五年度幼兒早期教育托管班入園協(xié)議書3篇
- 二零二五年度養(yǎng)殖場租賃與農(nóng)業(yè)生態(tài)循環(huán)經(jīng)濟發(fā)展合作合同3篇
- 2025年度新型建筑材料內(nèi)部承包協(xié)議書3篇
- 2025年度農(nóng)村保潔員崗位職責(zé)及待遇合同
- 2025年度水產(chǎn)養(yǎng)殖廢棄物處理設(shè)施建設(shè)合作協(xié)議合同3篇
- 2025年度教育培訓(xùn)機構(gòu)掛靠合作協(xié)議書標(biāo)準(zhǔn)模板3篇
- 二零二五年度農(nóng)業(yè)現(xiàn)代化土地承包合作框架協(xié)議3篇
- 部編版八年級上全冊古文注釋、翻譯、閱讀習(xí)題及答案【2020版】
- 2012生物化學(xué)答疑-02
- 公墓項目建議書
- 高壓氧艙技術(shù)要求
- 南京郵電大學(xué)通達學(xué)院學(xué)生成績復(fù)核申請表
- 《怪老頭兒》閱讀測試及答案
- 螺栓對應(yīng)重量表
- 施工現(xiàn)場消防安全操作規(guī)程
- A4標(biāo)簽打印模板
- (完整版)工程項目管理組織機構(gòu)
- 工程質(zhì)量檢測內(nèi)容包括哪些?
評論
0/150
提交評論