深入java核心java中多態(tài)的實現(xiàn)機(jī)制

深入java核心java中多態(tài)的實現(xiàn)機(jī)制

ID:8833855

大?。?6.61 KB

頁數(shù):11頁

時間:2018-04-09

深入java核心java中多態(tài)的實現(xiàn)機(jī)制_第1頁
深入java核心java中多態(tài)的實現(xiàn)機(jī)制_第2頁
深入java核心java中多態(tài)的實現(xiàn)機(jī)制_第3頁
深入java核心java中多態(tài)的實現(xiàn)機(jī)制_第4頁
深入java核心java中多態(tài)的實現(xiàn)機(jī)制_第5頁
資源描述:

《深入java核心java中多態(tài)的實現(xiàn)機(jī)制》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、1.派生類對象的方法調(diào)用必須通過一個基類類型的變量進(jìn)行。2.調(diào)用的方法必須在派生類中被定義。3.調(diào)用的方法也必須被聲明為基類的一個成員。4.基類和派生類中對應(yīng)的方法的簽名必須相同。5.基類和派生類的方法的返回對象類型必須相同或者返回對象類型必須是協(xié)變的。6.派生類的方法的訪問說明符不能比基類有更多的限制。深入Java核心Java中多態(tài)的實現(xiàn)機(jī)制多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計代碼重用的一個重要機(jī)制,我們曾不只一次的提到Java多態(tài)性。在Java運行時多態(tài)性:繼承和接口的實現(xiàn)一文中,我們曾詳細(xì)介紹了Java實現(xiàn)運行時多態(tài)性

2、的動態(tài)方法調(diào)度;今天我們再次深入Java核心,一起學(xué)習(xí)Java中多態(tài)性的實現(xiàn)?!皃olymorphism(多態(tài))”一詞來自希臘語,意為“多種形式”。多數(shù)Java程序員把多態(tài)看作對象的一種能力,使其能調(diào)用正確的方法版本。盡管如此,這種面向?qū)崿F(xiàn)的觀點導(dǎo)致了多態(tài)的神奇功能,勝于僅僅把多態(tài)看成純粹的概念。Java中的多態(tài)總是子類型的多態(tài)。幾乎是機(jī)械式產(chǎn)生了一些多態(tài)的行為,使我們不去考慮其中涉及的類型問題。本文研究了一種面向類型的對象觀點,分析了如何將對象能夠表現(xiàn)的行為和對象即將表現(xiàn)的行為分離開來。拋開Java中的多態(tài)都是

3、來自繼承的概念,我們?nèi)匀豢梢愿械?,Java中的接口是一組沒有公共代碼的對象共享實現(xiàn)。多態(tài)的分類多態(tài)在面向?qū)ο笳Z言中是個很普遍的概念.雖然我們經(jīng)常把多態(tài)混為一談,但實際上有四種不同類型的多態(tài)。在開始正式的子類型多態(tài)的細(xì)節(jié)討論前,然我們先來看看普通面向?qū)ο笾械亩鄳B(tài)。LucaCardelli和PeterWegner("OnUnderstandingTypes,DataAbstraction,andPolymorphism"一文的作者,文章參考資源鏈接)把多態(tài)分為兩大類----特定的和通用的----四小類:強(qiáng)制的,重載的

4、,參數(shù)的和包含的。他們的結(jié)構(gòu)如下:在這樣一個體系中,多態(tài)表現(xiàn)出多種形式的能力。通用多態(tài)引用有相同結(jié)構(gòu)類型的大量對象,他們有著共同的特征。特定的多態(tài)涉及的是小部分沒有相同特征的對象。四種多態(tài)可做以下描述:◆強(qiáng)制的:一種隱式做類型轉(zhuǎn)換的方法?!糁剌d的:將一個標(biāo)志符用作多個意義?!魠?shù)的:為不同類型的參數(shù)提供相同的操作?!舭模侯惏P(guān)系的抽象操作。我將在講述子類型多態(tài)前簡單介紹一下這幾種多態(tài)。強(qiáng)制的多態(tài)強(qiáng)制多態(tài)隱式的將參數(shù)按某種方法,轉(zhuǎn)換成編譯器認(rèn)為正確的類型以避免錯誤。在以下的表達(dá)式中,編譯器必須決定二元運算符‘

5、+’所應(yīng)做的工作:2.0+2.02.0+22.0+"2"第一個表達(dá)式將兩個double的操作數(shù)相加;Java中特別聲明了這種用法。第二個表達(dá)式將double型和int相加。Java中沒有明確定義這種運算。不過,編譯器隱式的將第二個操作數(shù)轉(zhuǎn)換為double型,并作double型的加法。做對程序員來說十分方便,否則將會拋出一個編譯錯誤,或者強(qiáng)制程序員顯式的將int轉(zhuǎn)換為double。第三個表達(dá)式將double與一個String相加。Java中同樣沒有定義這樣的操作。所以,編譯器將double轉(zhuǎn)換成String類型,并

6、將他們做串聯(lián)。強(qiáng)制多態(tài)也會發(fā)生在方法調(diào)用中。假設(shè)類Derived繼承了類Base,類C有一個方法,原型為m(Base),在下面的代碼中,編譯器隱式的將Derived類的對象derived轉(zhuǎn)化為Base類的對象。這種隱式的轉(zhuǎn)換使m(Base)方法使用所有能轉(zhuǎn)換成Base類的所有參數(shù)。1.C?c?=?new?C();?2.?3.Derived?derived?=?new?Derived();?4.?5.c.m(?derived?);?并且,隱式的強(qiáng)制轉(zhuǎn)換,可以避免類型轉(zhuǎn)換的麻煩,減少編譯錯誤。當(dāng)然,編譯器仍然會優(yōu)先驗

7、證符合定義的對象類型。重載的多態(tài)重載允許用相同的運算符或方法,去表示截然不同的意義?!?’在上面的程序中有兩個意思:兩個double型的數(shù)相加;兩個串相連。另外還有整型相加,長整型,等等。這些運算符的重載,依賴于編譯器根據(jù)上下文做出的選擇。以往的編譯器會把操作數(shù)隱式轉(zhuǎn)換為完全符合操作符的類型。雖然Java明確支持重載,但不支持用戶定義的操作符重載。Java支持用戶定義的函數(shù)重載。一個類中可以有相同名字的方法,這些方法可以有不同的意義。這些重載的方法中,必須滿足參數(shù)數(shù)目不同,相同位置上的參數(shù)類型不同。這些不同可以幫

8、助編譯器區(qū)分不同版本的方法。編譯器以這種唯一表示的特征來表示不同的方法,比用名字表示更為有效。據(jù)此,所有的多態(tài)行為都能編譯通過。強(qiáng)制和重載的多態(tài)都被分類為特定的多態(tài),因為這些多態(tài)都是在特定的意義上的。這些被劃入多態(tài)的特性給程序員帶來了很大的方便。強(qiáng)制多態(tài)排除了麻煩的類型和編譯錯誤。重載多態(tài)像一塊糖,允許程序員用相同的名字表示不同的方法,很方便。參數(shù)的多態(tài)參數(shù)多態(tài)允許把許多

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

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

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