第03章面向?qū)ο蟮暮诵奶匦?3)

第03章面向?qū)ο蟮暮诵奶匦?3)

ID:47044712

大?。?9.50 KB

頁(yè)數(shù):8頁(yè)

時(shí)間:2019-07-07

第03章面向?qū)ο蟮暮诵奶匦?3)_第1頁(yè)
第03章面向?qū)ο蟮暮诵奶匦?3)_第2頁(yè)
第03章面向?qū)ο蟮暮诵奶匦?3)_第3頁(yè)
第03章面向?qū)ο蟮暮诵奶匦?3)_第4頁(yè)
第03章面向?qū)ο蟮暮诵奶匦?3)_第5頁(yè)
資源描述:

《第03章面向?qū)ο蟮暮诵奶匦?3)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、3.3類的繼承性前面的課程學(xué)習(xí)了類的概念,以及用JAVA語(yǔ)言如何寫類、屬性、方法、構(gòu)造方法。我們還討論了類的封裝性,學(xué)習(xí)了通過對(duì)類成員(屬性和方法)的私有化以及方法的重載,減少類暴露在外部的特性,使類的外部使用者更容易理解類、重復(fù)的使用類,類的封裝在面向?qū)ο蟮能浖到y(tǒng)設(shè)計(jì)中有重要意義。這節(jié)課是面向?qū)ο蟮娜齻€(gè)最主要的特性封裝、繼承和多態(tài)的第二個(gè)特性----繼承。繼承是進(jìn)化論在軟件工程中的實(shí)現(xiàn),是對(duì)我們周圍事物發(fā)展演化的模仿,一個(gè)類可以繼承它的父類,并且比它的父類更強(qiáng)大?!皬埲袼帧?因?yàn)閺埲@個(gè)對(duì)象繼承了他父親的很多行為方式,自

2、然界中這種現(xiàn)象數(shù)不勝數(shù)。當(dāng)我們把對(duì)象張三抽象成“兒子類”,張三的父親抽象成“父親類”,我們也很容易發(fā)現(xiàn):兒子繼承了父親的行為特征,而這種繼承即是多級(jí)的(曾祖—>祖父à父親à兒子),又是多重的(兒子繼承父親+母親)。繼承不僅是對(duì)是對(duì)父類行為方式的模仿,而且包含發(fā)展進(jìn)化思想。發(fā)展進(jìn)化是指子類除了繼承父類所有的屬性和方法外,還可以添加自已的屬性方法。在面向?qū)ο蟮氖澜缋铮宇愑肋h(yuǎn)比父類更強(qiáng)大,這一點(diǎn)與現(xiàn)實(shí)世界有所不同。上面是面向?qū)ο罄^承的思想。下面看JAVA怎樣實(shí)現(xiàn)這種思想的,請(qǐng)閱讀教材P84“3.3類的繼承性”。繼承可以使子類“免費(fèi)”

3、獲得父類的屬性/方法,功能非常強(qiáng)大,但要慎重使用。下面從軟件設(shè)計(jì)角度討論幾個(gè)關(guān)于繼承的問題:(1)繼承的效率問題:繼承的效率低(2)繼承鏈的層次:最多3-5層(3)父類和子類的isakindof關(guān)系:重要的設(shè)計(jì)概念(4)繼承鏈倒置:初學(xué)者常犯的錯(cuò)誤小結(jié):關(guān)于繼承,本課講的比較少,但在后續(xù)章節(jié)的JAVA類庫(kù)編程中我們會(huì)反復(fù)用到,因?yàn)槊烤帉懸粋€(gè)實(shí)用的JAVA程序都會(huì)繼承JAVA類庫(kù)的一幾或幾個(gè)類。繼承的核心思想就是子類比父類更強(qiáng)大,子類可以復(fù)用和發(fā)展父類,使軟件系統(tǒng)“可持續(xù)性發(fā)展”。至于JAVA語(yǔ)言關(guān)于繼承的煩瑣語(yǔ)法規(guī)定,與繼承的核

4、心思想相比則顯得不那么重要。3.4類的多態(tài)性前面學(xué)習(xí)了類的繼承,它體現(xiàn)了進(jìn)化論發(fā)展和進(jìn)化的一面,關(guān)于繼承,我們知道子類要么全部繼承父類,要么全不繼承,不能繼承一部分。這與進(jìn)化論的另一面----選擇和淘汰思想不符,自然界的繼承是有選擇和有淘汰的。面向?qū)ο蟮娜齻€(gè)最主要的特性封裝、繼承和多態(tài)的第三個(gè)特性----多態(tài)性部分彌補(bǔ)了面向?qū)ο笤谶x擇和淘汰方面的不足,體現(xiàn)了現(xiàn)實(shí)世界(含生物學(xué))的多樣性??唇滩腜93。多態(tài)的小結(jié)現(xiàn)在我們給多態(tài)下個(gè)定義:所謂多態(tài)性是指發(fā)出同樣的消息(方法調(diào)用)被不同類型的對(duì)象接收,導(dǎo)致不同的行為。利用多態(tài)性,用戶只

5、需發(fā)送一般形式的消息,而將所有的實(shí)現(xiàn)留給接收消息的對(duì)象。JAVA的多態(tài)有兩種:方法的多態(tài)(重載和覆蓋),類型的多態(tài)(子類類型即是父類類型)。需要注意的是:重載(overloading)和覆蓋(overriding)是非常容易混淆的兩個(gè)概念,其語(yǔ)法上的主要區(qū)別為:重載一般只發(fā)生在一個(gè)類里(有時(shí)也子類和父類),而覆蓋發(fā)生在子類和父類之間。3.5抽象類、最終類、最終方法中國(guó)一直是一個(gè)大國(guó),有多級(jí)行政機(jī)構(gòu)。政策是如何執(zhí)行的?中央發(fā)文件,到地方執(zhí)行。中央文件不做具體事,只負(fù)責(zé)告訴地方怎么做,如果把中央文件看成一個(gè)類,那么文件的具體實(shí)現(xiàn)由地

6、方完成。所以從客觀世界可以抽象出這樣的類:它自已什么也不做,只規(guī)定類的接口,具體實(shí)現(xiàn)由子類完成。JAVA語(yǔ)言將這種類叫抽象類。閱讀教材P97“3.5類的抽象性”。3.6接口閱讀教材P106“4.1接口”。接口與抽象類的區(qū)別:l從通用的設(shè)計(jì)概念上說,抽象類與實(shí)現(xiàn)它的子類是isakindof的關(guān)系。接口與實(shí)現(xiàn)它的子類是一種契約關(guān)系。比如,假定有一個(gè)抽象的person類,student類繼承并實(shí)現(xiàn)它,兩者是isakindof的關(guān)系。而軟件專業(yè)有很多門必修課,假如這些課程被設(shè)計(jì)成接口course,則繼承并實(shí)現(xiàn)它的student類與cou

7、rse是一種契約關(guān)系。l從JAVA語(yǔ)言的具體規(guī)定來說,接口允許多繼承,抽象類只能單繼承。原因?yàn)榱吮苊忸惖亩嗬^承帶來的一些語(yǔ)義、編譯器設(shè)計(jì)、效率等問題。l在實(shí)際工作中,接口比抽象類更常見,接口可以當(dāng)作項(xiàng)目的“技術(shù)標(biāo)準(zhǔn)”來使用,尤其是大型項(xiàng)目,軟件構(gòu)架師往往設(shè)計(jì)很多接口,去規(guī)范團(tuán)隊(duì)開發(fā)。3.7綜合代碼講解集中講解教材幾個(gè)例子,說明多態(tài)(重載/覆蓋,運(yùn)行時(shí)多態(tài))、抽象類、接口應(yīng)該怎樣使用。(1)P99例3-7這個(gè)例子說明了抽象類運(yùn)行時(shí)多態(tài)的經(jīng)典用法。利用多態(tài)性,用戶(CloseFigure_ex)只需發(fā)送一般形式的消息給抽象類Clos

8、eFigure,而所有的實(shí)現(xiàn)留給接受消息的具體對(duì)象----CloseFigure的各個(gè)子類。下面討論幾種可行的方案:l方案1:教材上寫法。l方案2:如將抽象類CloseFigure改造成非抽象類,會(huì)有同樣效果嗎?會(huì)。但這種設(shè)計(jì)不夠抽象。l方案3:如將抽象類Clo

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。