版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第八章繼承張坤龍zhangkl@天津大學計算機學院第八章繼承概要創(chuàng)建子類方法覆蓋類的層次結(jié)構(gòu)繼承與可見性繼承的設(shè)計繼承與GUITimer
類2概要創(chuàng)建子類2類A類B類C類D類F類GJava中僅僅支持單一繼承,同時Java采用Interface(接口)實現(xiàn)多重繼承多重繼承3類A類B類C類D類F類GJava中僅僅支持單一繼承,同時Ja繼承UML類圖中,繼承關(guān)系如下表示:一條帶空心三角的實心箭頭線表示,三角指向父類VehicleCar繼承:是一個的關(guān)系(is-a),即子類是父類的一個特殊版本Java中,使用保留字extends
來創(chuàng)建繼承關(guān)系classCarextendsVehicle{
//classcontents}4繼承UML類圖中,繼承關(guān)系如下表示:一條帶空心三角的實心箭派生子類Java中,使用保留字extends來創(chuàng)建繼承關(guān)系參考Words.java(第298頁)參考Book.java(第299頁)參考Dictionary.java(第299頁)classCarextendsVehicle{
//classbody}5派生子類Java中,使用保留字extends來創(chuàng)建繼承關(guān)系類圖Book#pages:int+pageMessage():voidDictionary-definitions:int+definitionMessage():voidWords+main(args:String[]):void#表示protected修飾符6類圖Book#pages:int+pageMessaprotected修飾符可見性修飾符影響父類的成員在子類中使用的方式private修飾的變量和方法不能在子類中直接引用但是它們被聲明為public可見性,那么他們可以在子類中引用——–但是public違背的封裝的原則那么還有一種可見性修飾符:protected,它比public可見性提供了更多的封裝,但是又沒有private封裝的那么嚴實。7protected修飾符可見性修飾符影響父類的成員在子類中super引用由于構(gòu)造函數(shù)不被繼承,所以子類構(gòu)造函數(shù)通過調(diào)用父類的構(gòu)造函數(shù),建立子類中父類的部分參考
Words2.java(第301頁)參考
Book2.java(第302頁)參考
Dictionary2.java(第303頁)8super引用由于構(gòu)造函數(shù)不被繼承,所以子類構(gòu)造函數(shù)通過調(diào)super引用應(yīng)由子類的構(gòu)造函數(shù)負責調(diào)用父類的構(gòu)造函數(shù)子類構(gòu)造函數(shù)中:第一行應(yīng)該使用super引用調(diào)用父類的構(gòu)造函數(shù),否則Java將自動在構(gòu)造方法開始處產(chǎn)生一行super()調(diào)用。Super的第二種形式,這種用法有下面的通用形式super.member9super引用應(yīng)由子類的構(gòu)造函數(shù)負責調(diào)用父類的構(gòu)造函數(shù)9多重繼承Java支持單繼承,也就是說派生的子類只能由唯一的父類多重繼承允許子類派生自兩個或者兩個以上的父類,子類繼承所有父類的成員多重繼承有時會引發(fā)一些問題,例如兩個父類具有同名變量。Java并不支持多重繼承多數(shù)情況下,使用接口在某些方面來替代多重繼承10多重繼承Java支持單繼承,也就是說派生的子類只能由唯一的父概要創(chuàng)建子類方法覆蓋類的層次結(jié)構(gòu)繼承與可見性繼承的設(shè)計繼承與GUITimer
類11概要創(chuàng)建子類11覆蓋、重載的比較重載處理一個類中的多個具有相同名稱但是簽名不同的方法覆蓋處理的方法,一個在父類中,一個在子類中,兩個方法具有相同的簽名參考
Messages.java(第305頁)參考
Thought.java(第306頁)參考
Advice.java(第306頁)可以用final修飾符定義一個方法,子類不能覆蓋父類的final方法12覆蓋、重載的比較重載處理一個類中的多個具有相同名稱但是簽名概要創(chuàng)建子類方法覆蓋類的層次結(jié)構(gòu)繼承與可見性繼承的設(shè)計繼承與GUITimer
類13概要創(chuàng)建子類13類的層次結(jié)構(gòu)某個類的子類可以是另外一個類的父類,形成類的層次結(jié)構(gòu):動物馬蝙蝠鳥類燕子哺乳動物具有相同父類的兩個子類稱作兄弟公共屬性應(yīng)該盡可能放在類層次中較高層繼承關(guān)系具有傳遞性因此,子類可以從繼承所有父類的成員14類的層次結(jié)構(gòu)某個類的子類可以是另外一個類的父類,形成類的層Object類Object類在
java標準類庫的java.lang包中定義Java中所有的類都派生自O(shè)bject類如果一個類定義時沒有顯式地指明其父類,那么此類繼承自O(shè)bject類因此,Object類是類層次結(jié)構(gòu)中的根類15Object類Object類在java標準類庫的javaObject類Object類包含包含一些被所有類繼承的有用方法例如,Object類中定義的toString方法
每次我們定義toString方法,實際上是覆蓋了此方法從Object類繼承的定義Object類中的toString方法返回一個字符串,這個字符串包含對象類的名稱以及其它一些信息16Object類Object類包含包含一些被所有類繼承的有用方Object類如果兩個引用互為別名,Object
類中的equals方法返回true我們在定義類時,可以覆蓋equals方法來根據(jù)實際情況確定兩個對象是否相等例如,如果兩個字符串對象包含相同的字符,那么String類定義的equals方法來返回true
設(shè)計String類時,覆蓋了繼承自O(shè)bject
類的equals方法17Object類如果兩個引用互為別名,Object類中的e抽象類抽象類在類的層次結(jié)構(gòu)中起到占位符的作用,通常用于表示一種通用概念。抽象類不能被實例化在類的頭部使用abstract
修飾符來申明一個抽象類:publicabstractclassProduct{
//contents}18抽象類抽象類在類的層次結(jié)構(gòu)中起到占位符的作用,通常用于表示一抽象類抽象類中通常包含沒有實現(xiàn)的抽象方法在抽象類中,abstract修飾符必須應(yīng)用于每個抽象方法而在接口中可以省略抽象方法的abstract修飾符一個抽象類也可以包含非抽象的方法抽象類沒有必要必須包含抽象方法,即抽象類也可以沒有抽象方法。與接口不同的是,abstract修飾符必須應(yīng)用于每個抽象方法19抽象類抽象類中通常包含沒有實現(xiàn)的抽象方法19抽象類抽象類的子類必須覆蓋其父類的抽象方法,否則此子類依然被認為是抽象類抽象方法不能使用final
或static定義在軟件設(shè)計中,抽象類是一個重要元素:它允許我們在層次結(jié)構(gòu)中建立通用元素20抽象類抽象類的子類必須覆蓋其父類的抽象方法,否則此子類依然被接口層次與類一樣,繼承也可以被應(yīng)用于接口,即接口可以派生出另外一個接口子接口繼承了父接口中所有的抽象方法實現(xiàn)子接口的類必須定義所有父類與子接口中的所有方法注意,類的層次結(jié)構(gòu)與接口層次結(jié)構(gòu)是不同的21接口層次與類一樣,繼承也可以被應(yīng)用于接口,即接口可以派生出另概要創(chuàng)建子類方法覆蓋類的層次結(jié)構(gòu)繼承與可見性繼承的設(shè)計繼承與GUITimer
類22概要創(chuàng)建子類22重溫可見性理解繼承與可見性的細微差別是非常重要的父類所有的變量和方法,甚至是私有成員都會被子類所繼承我們以前提到過,子類中不能通過名字引用私有成員但是,被子類繼承的私有成員總是存在并且能被間接引用23重溫可見性理解繼承與可見性的細微差別是非常重要的23可見性父類可以引用自己的私有成員,因此子類可以用過調(diào)用父類的方法間接引用父類私有成員即使沒有父類對象存在,也可以通過Super引用指向父類參考FoodAnalyzer.java(第311頁)參考FoodItem.java(第312頁)參考Pizza.java(第312頁)24可見性父類可以引用自己的私有成員,因此子類可以用過調(diào)用父類的概要創(chuàng)建子類方法覆蓋類的層次結(jié)構(gòu)繼承與可見性繼承的設(shè)計繼承與GUITimer
類25概要創(chuàng)建子類25繼承關(guān)系的設(shè)計正如我們前面討論的,花費時間建立好的軟件設(shè)計將獲得長期的效益繼承的設(shè)計是面向?qū)ο笤O(shè)計中非常重要的一部分恰當?shù)脑O(shè)計繼承關(guān)系對于軟件的可維護性以及重用非常有用我們來總結(jié)一些好的軟件設(shè)計在繼承方面應(yīng)該注意的問題26繼承關(guān)系的設(shè)計正如我們前面討論的,花費時間建立好的軟件設(shè)計繼承設(shè)計觀點每一次的派生都應(yīng)該具有“is-a”的關(guān)系設(shè)計類層次結(jié)構(gòu)有利于現(xiàn)有類的重用和將來潛在的軟件重用在問題領(lǐng)域識別類和對象,找出它們的公共屬性,并合理地將公共屬性設(shè)置在盡可能高的類層次上通過方法的覆蓋和增加修改子類的功能給子類增加新的變量時,注意避免重新定義任何繼承來的變量(避免影子變量)27繼承設(shè)計觀點每一次的派生都應(yīng)該具有“is-a”的關(guān)系27繼承設(shè)計觀點讓每個類管理自己的數(shù)據(jù);使用super引用調(diào)用父類構(gòu)造方法建立自己的數(shù)據(jù)即使當前還不使用,也應(yīng)該重新定義常用的方法,例如toString
和equals方法使用抽象類代表低層類都有的通用概念慎重地使用可見性修飾符,在提供子類所需的訪問控制的同時,不要破壞封裝28繼承設(shè)計觀點讓每個類管理自己的數(shù)據(jù);使用super引用調(diào)用父限制繼承Final修飾符可以用于限制繼承
如果final
修飾符應(yīng)用于一個方法,那么任何子類都不能覆蓋這個方法如果final
修飾符用于整個類,那么這個類不能派生任何子類因此抽象類不能被聲明為final恰當?shù)乩胒inal修飾符限制繼承是軟件設(shè)計方案中的關(guān)鍵29限制繼承Final修飾符可以用于限制繼承29概要創(chuàng)建子類方法覆蓋類的層次結(jié)構(gòu)繼承與可見性繼承的設(shè)計繼承與GUITimer
類30概要創(chuàng)建子類30組件類的層次結(jié)構(gòu)定義GUI組件的所有Java類都是類層次結(jié)構(gòu)中的一部分SwingGUI組件由Jcomponent類派生,Jcomponent類由Container派生,Container類由
Component
類派生許多Swing組件由于派生自Container類,因此能作為容器例如,
JLabel
對象可以包含一個ImageIcon對象31組件類的層次結(jié)構(gòu)定義GUI組件的所有Java類都是類層次結(jié)組件類的層次結(jié)構(gòu)Applet是體現(xiàn)繼承的一個比較好的例子回顧一下,當我們定義一個applet時,我們要擴展Applet
類或者JApplet
類Applet類和Japplet類已經(jīng)處理了所有關(guān)于applet創(chuàng)建、執(zhí)行的所有細節(jié),包括:與瀏覽器的交互通過HTML接收applet參數(shù)增強安全限制32組件類的層次結(jié)構(gòu)Applet是體現(xiàn)繼承的一個比較好的例子3組件類的層次結(jié)構(gòu)我們的applet類只需要關(guān)注特定的功能當我們定義applet的paintComponent方法時,我們實際上覆蓋了原先定義在Jcomponent類和從Jppplet類繼承的方法33組件類的層次結(jié)構(gòu)我們的applet類只需要關(guān)注特定的功能33事件適配器類繼承為我們提供了創(chuàng)建監(jiān)聽器類時,一種可供替換的技術(shù)我們已經(jīng)知道,通過實現(xiàn)一個特殊的接口,(例如MouseListener接口)來創(chuàng)建監(jiān)聽器類另外我們也可以通過擴展一個事件適配器類來創(chuàng)建一個監(jiān)聽器類具有多個方法的每個監(jiān)聽器接口都有一個對應(yīng)的配器類,例如MouseAdapter
類34事件適配器類繼承為我們提供了創(chuàng)建監(jiān)聽器類時,一種可供替換的技事件適配器類每個適配器類實現(xiàn)其對應(yīng)的監(jiān)聽器并且提供提供空的方法定義當從一個適配器類派生一個監(jiān)聽器類時,只需要覆蓋與程序相關(guān)的事件方法由于繼承,不需要定義那些為不使用的事件方法編寫的空定義參考OffCent
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保安宿舍衛(wèi)生安全制度
- 公司衛(wèi)生值日管理制度
- 村級環(huán)境衛(wèi)生獎懲制度
- 校園環(huán)境衛(wèi)生督察制度
- 衛(wèi)生系統(tǒng)財務(wù)審計制度
- 制定衛(wèi)生安全管理制度
- 六常檢查衛(wèi)生制度
- 賓館從業(yè)人員衛(wèi)生制度
- 員工店里衛(wèi)生管理制度
- 接待中心衛(wèi)生管理制度
- 職業(yè)技能認定考評員考核試題與答案
- 床上運動及轉(zhuǎn)移技術(shù)課件
- 子宮腺肌癥術(shù)后護理
- 獨資股東協(xié)議書范本
- 2024-2025蘇教版小學數(shù)學二年級上冊期末考試測試卷及答案(共3套)
- 光伏發(fā)電項目風險
- 風力發(fā)電項目分包合同施工合同
- GB/T 8607-2024專用小麥粉
- 新版外國人永久居住身份證考試試題
- 2024年中考數(shù)學復習:瓜豆原理講解練習
- 高一歷史期末試題中國近現(xiàn)代史
評論
0/150
提交評論