freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

java多形性ppt課件-展示頁

2024-10-28 04:52本頁面
  

【正文】 nstrument內(nèi)的所有方法都顯示出錯(cuò)消息。換言之, Instrument的作用僅僅是表達(dá)接口,而不是表達(dá)一些具體的實(shí)施細(xì)節(jié)。為闡述這個(gè)觀念,另一個(gè)方法是把 Instrument稱為 “ 抽象基礎(chǔ)類 ” (簡稱 “ 抽象類 ” )。 ?之所以要建立這個(gè)通用接口,原因就是它能為不同的子類型作出不同的表示。若去調(diào)用這些方法,就會(huì)出現(xiàn)錯(cuò)誤。 14 ?對(duì)于樂器例子,假設(shè)在基礎(chǔ)類里加入更多的方法,以及一系列新類,那么會(huì)出現(xiàn)什么情況呢?下面是示意圖: ? ?多形性是一種至關(guān)重要的技術(shù),它允許程序員 “ 將發(fā)生改變的東西同沒有發(fā)生改變的東西區(qū)分開 ” 。我們說這樣的程序具有 “ 擴(kuò)展性 ” ,因?yàn)榭梢詮耐ㄓ玫幕A(chǔ)類繼承新的數(shù)據(jù)類型,從而新添一些功能。由于存在多形性,所以可根據(jù)自己的需要向系統(tǒng)里加入任意多的新類型,同時(shí)毋需更改 tune()方法。那么編譯器怎樣才能知道該做其他任何事情呢?但此時(shí)實(shí)際調(diào)用的是 (), 因?yàn)楹笃诮壎ㄒ呀?jīng)介入(多形性)。 12 ?當(dāng)調(diào)用其中一個(gè)基礎(chǔ)類方法時(shí)(已在衍生類里覆蓋): ()。 這表面看起來似乎屬于錯(cuò)誤操作(將一種類型分配給另一個(gè)),但實(shí)際是完全可行的 —— 因?yàn)榘凑绽^承關(guān)系, Circle屬于 Shape的一種。下面繼承圖展示了它們的關(guān)系: 11 ?上溯造型可用下面這個(gè)語句簡單地表現(xiàn)出來: Shape s = new Circle()。形狀例子有一個(gè)基礎(chǔ)類,名為Shape; 另外還有大量衍生類型: Circle( 圓形),Square( 方形), Triangle( 三角形)等等。它可有效地 “ 關(guān)閉 ” 動(dòng)態(tài)綁定,編譯器就可為 final方法調(diào)用生成效率更高的代碼。 ?Java中綁定的所有方法都采用后期綁定技術(shù),除非一個(gè)方法已被聲明成 final。 ?不同的語言對(duì)后期綁定的實(shí)現(xiàn)方法是有所區(qū)別的。 9 ?要實(shí)現(xiàn)后期綁定,同時(shí)必須提供一些機(jī)制,可在運(yùn)行期間判斷對(duì)象的類型,并分別調(diào)用適當(dāng)?shù)姆椒ā? ?解決的方法就是 “ 后期綁定 ” ,它意味著綁定在運(yùn)行期間進(jìn)行,以對(duì)象的類型為基礎(chǔ)。 若在程序運(yùn)行以前執(zhí)行綁定(由編譯器和鏈接程序,如果有的話),就叫作 “ 早期綁定 ” 。為了理解這個(gè)問題,這里探討一下 “ 綁定 ” 這個(gè)主題。 } ?它接收 Instrument句柄。 ?假如只寫一個(gè)方法,將基礎(chǔ)類作為自變量或參數(shù)使用,而不是使用那些特定的衍生類,豈不是會(huì)簡單得多?也就是說,如果能不顧衍生類,只讓自己的代碼與基礎(chǔ)類打交道,那么省下的工作量將是難以估計(jì)的。此外,即使忘記對(duì)自己的某個(gè)方法進(jìn)行過載設(shè)置,編譯器也不會(huì)提示任何錯(cuò)誤。這意味著第一次就要求多得多的編程量。但要注意:假如那樣做,就需為系統(tǒng)內(nèi)Instrument的每種類型寫一個(gè)全新的 tune()。從 Wind向 Instrument的上溯造型可能 “ 縮小 ” 那個(gè)接口,但不可能把它變得比Instrument的接口還要小。當(dāng)一個(gè)Wind句柄傳遞給 tune()的時(shí)候,就會(huì)出現(xiàn)這種情況。取得一個(gè)對(duì)象句柄,并將其作為基礎(chǔ)類型句柄使用的行為就叫作 “ 上溯造型 ” —— 因?yàn)槔^承樹的畫法是基礎(chǔ)類位于最上方。一個(gè)對(duì)象可以通過引用子類的實(shí)例來調(diào)用子類的方法。 ? 2)運(yùn)行時(shí)多形 由于子類繼承了父類所有的屬性(私有的除外),所以子類對(duì)象可以作為父類對(duì)象使用。0 6 多形性Polymorphism 1 ? ?什么是多形性 Polymorphism? ?什么是覆蓋與過載? ?如何實(shí)現(xiàn)內(nèi)部類? 2 ?上溯造型 ?深入理解 ?覆蓋與過載 ?抽象類和方法 ?接口 ?內(nèi)部類 ?構(gòu)建器和多形性 ?通過繼承進(jìn)行設(shè)計(jì) 3 ?在 java語言中,多形性體現(xiàn)在兩個(gè)方面:由方法重載實(shí)現(xiàn)的靜態(tài)多形性(編譯時(shí)多形)和方法重寫實(shí)現(xiàn)的動(dòng)態(tài)多形性(運(yùn)行時(shí)多形)。 ? 1)編譯時(shí)多形 在編譯階段,具體調(diào)用哪個(gè)被重載的方法,編譯器會(huì)根據(jù)參數(shù)的不同來靜態(tài)確定調(diào)用相應(yīng)的方法。程序中凡是使用父類對(duì)象的地方,都可以用子類對(duì)象來代替。 4 ?可將一個(gè)對(duì)象作為它自己的類型使用,或者作為它的基礎(chǔ)類型的一個(gè)對(duì)象使用。 ? ?這里,方法 ()接收一個(gè) Instrument句柄,同時(shí)也接收從 Instrument衍生出來的所有東西。Instrument里的接口必須存在于 Wind中,因?yàn)?Wind是從Instrument里繼承得到的。 ? 5 ?如果讓 tune()簡單地取得一個(gè) Wind句柄,將其作為自己的自變量使用,似乎會(huì)更加簡單、直觀得多。 假設(shè)按照前面的推論,加入 Stringed( 弦樂)和Brass( 銅管)這兩種 Instrument( 樂器) ? 6 ? 這樣做當(dāng)然行得通,但卻存在一個(gè)極大的弊端:必須為每種新增的 Instrument類編寫與類緊密相關(guān)的方法。以后,假如想添加一個(gè)象 tune()那樣的新方法或者為 Instrument添加一個(gè)新類型,仍然需要進(jìn)行大量編碼工作。這樣一來,類型的整個(gè)操作過程就顯得極難管理,有失控的危險(xiǎn)。 7 ?觀察一下 tune()方法: public static void tune(Instrument i) { // ... ()。所以在這種情況下,編譯器怎樣才能知道 Instrument句柄指向的是一個(gè)Wind, 而不是一個(gè) Brass或 Stringed呢?編譯器無從得知。 8 ?將一個(gè)方法調(diào)用同一個(gè)方法主體連接到一起就稱為 “ 綁定 ” ( Binding)。 ?上述程序最令人迷惑不解的地方全與早期綁定有關(guān),因?yàn)樵谥挥幸粋€(gè) Instrument句柄的前提下,編譯器不知道具體該調(diào)用哪個(gè)方法。后期綁定也叫作 “ 動(dòng)態(tài)綁定 ” 或 “ 運(yùn)行期綁定 ” 。也就是說,編譯器此時(shí)依然不知道對(duì)象的類型,但方法調(diào)用機(jī)制能自己去調(diào)查,找到正確的方法主體。但我們可以這樣認(rèn)為:它們都要在對(duì)象中安插某些特殊類型的信息。 這意味著我們通常不必決定是否應(yīng)進(jìn)行后期綁定 —— 它是自動(dòng)發(fā)生的。 10 ?經(jīng)典的 “ 形狀 ” 的例子。這里,很容易理解 “ 圓屬于形狀的一種類型 ” 等概念。 ?在這里,創(chuàng)建了 Circle對(duì)象,并將結(jié)果句柄立即賦給一個(gè) Shape。因此編譯器認(rèn)可上述語句,不會(huì)提示一條出錯(cuò)消息。 ?同樣地,大家也許認(rèn)為會(huì)調(diào)用 Shape的 draw(), 因?yàn)檫@畢
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1