把不同的子類對象都當(dāng)作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,以適應(yīng)需求的不斷變化。

成都創(chuàng)新互聯(lián)公司專注于運城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供運城營銷型網(wǎng)站建設(shè),運城網(wǎng)站制作、運城網(wǎng)頁設(shè)計、運城網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造運城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供運城網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
賦值之后,父對象就可以根據(jù)當(dāng)前賦值給它的子對象的特性以不同的方式運作。也就是說,父親的行為像兒子,而不是兒子的行為像父親。
舉個例子:從一個基類中派生,響應(yīng)一個虛命令,產(chǎn)生不同的結(jié)果。
比如從某個基類繼承出多個對象,其基類有一個虛方法Tdoit,然后其子類也有這個方法,但行為不同,然后這些子對象中的任何一個可以賦給其基類的對象,這樣其基類的對象就可以執(zhí)行不同的操作了。實際上你是在通過其基類來訪問其子對象的,你要做的就是一個賦值操作。
使用繼承性的結(jié)果就是可以創(chuàng)建一個類的家族,在認(rèn)識這個類的家族時,就是把導(dǎo)出類的對象當(dāng)作基類的的對象,這種認(rèn)識又叫作upcasting。這樣認(rèn)識的重要性在于:我們可以只針對基類寫出一段程序,但它可以適應(yīng)于這個類的家族,因為編譯器會自動就找出合適的對象來執(zhí)行操作。這種現(xiàn)象又稱為多態(tài)性。而實現(xiàn)多態(tài)性的手段又叫稱動態(tài)綁定(dynamic
binding)。
簡單的說,建立一個父類的變量,它的內(nèi)容可以是這個父類的,也可以是它的子類的,當(dāng)子類擁有和父類同樣的函數(shù),當(dāng)使用這個變量調(diào)用這個函數(shù)的時候,定義這個變量的類(也就是父類)里的同名函數(shù)將被調(diào)用,當(dāng)在父類里的這個函數(shù)前加virtual關(guān)鍵字,那么子類的同名函數(shù)將被調(diào)用。
其實多態(tài)是一種面向?qū)ο蟮脑O(shè)計思想,也就是只給接口,讓你去實現(xiàn)(可以替換實現(xiàn)),就是設(shè)計和實現(xiàn)的分離,這個做法有利于軟件的重用。
舉個例子,你創(chuàng)建了一個動物的抽象類或接口,里面有一些接口方法,你造了一個動物園,然后有各種動物的奔跑、叫喚、吃食等動作作為方法,但你并沒有實現(xiàn)它,在沒有任何動物之前你只用知道如何把這些動物都圈到籠子里,就有動物園了。
然后,從別處給你運來了老虎、獅子、猴子、狗、貓這些動物,都是實現(xiàn)了你的奔跑、叫喚、吃食這些方法了,這些就是具體動物的實現(xiàn)部分,你把他們掛到你動物園上就行了。這就是多態(tài)。
以下是一些理論的描述,請參考:
多態(tài)給我們帶來的好處,可以歸納為如下5點:
1. 可替換性(substitutability)。多態(tài)對已存在代碼具有可替換性。例如,多態(tài)對圓Circle類工作,對其他任何圓形幾何體,如圓環(huán),也同樣工作。
2. 可擴充性(extensibility)。多態(tài)對代碼具有可擴充性。增加新的子類不影響已存在類的多態(tài)性、繼承性,以及其他特性的運行和操作。實際上新加子類更容易獲得多態(tài)功能。例如,在實現(xiàn)了圓錐、半圓錐以及半球體的多態(tài)基礎(chǔ)上,很容易增添球體類的多態(tài)性。
3. 接口性(interface-ability)。多態(tài)是超類通過方法簽名,向子類提供了一個共同接口,由子類來完善或者覆蓋它而實現(xiàn)的。例如,假設(shè)超類Shape規(guī)定了
? 兩個實現(xiàn)多態(tài)的接口方法,computeArea()以及computeVolume()。子類,如Circle和Sphere為了實現(xiàn)多態(tài),可以完善或者覆蓋這兩個接口方法。
4. 靈活性(flexibility)。它在應(yīng)用中體現(xiàn)了靈活多樣的操作,提高了使用效率。
5. 簡化性(simplicity)。多態(tài)簡化對應(yīng)用軟件的代碼編寫和修改過程,尤其在處理大量對象的運算和操作時,這個特點尤為突出和重要。
值得注意的是,多態(tài)并不能夠解決提高執(zhí)行速度的問題,因為它基于動態(tài)裝載和地址引用,或稱動態(tài)綁定。但在Java中,除了final類和一定條件下的final方法外,所有方法都由JVM在運行期間進(jìn)行動態(tài)綁定。
1.可替換性。多態(tài)對已存在的代碼具有可替換性。(不用修改當(dāng)前代碼,只要提供新的方法就可以直接調(diào)用)
2.可擴充性。多態(tài)對代碼具有可擴充性。增加新的子類不影響已存在類的多態(tài)性、繼承性,以及其他特性的運行和操作。實際上新加子類更容易獲得多態(tài)功能。
3.接口性。多態(tài)是超類通過方法簽名,向子類提供了一個共同接口,由子類來完善或者覆蓋它而實現(xiàn)的。
4.靈活性。它在應(yīng)用中體現(xiàn)了靈活多樣的操作,提高了使用效率。
5.簡化性。多態(tài)簡化了對應(yīng)用軟件的代碼編寫和修改過程,尤其在處理大量對象的運算和操作時,這個特點尤為突出和重要。值得注意的是,多態(tài)并不能夠解決提高執(zhí)行速度的問題,因為它基于動態(tài)裝載和地址引用,或稱動態(tài)綁定。
java的繼承和多態(tài)是java語言面向?qū)ο缶幊痰囊淮筇厣@^承,實現(xiàn)了類的重用,這樣子可以減少程序員的工作量,而且利用這一特點,可以規(guī)范語言的關(guān)聯(lián)結(jié)構(gòu)層次,使得代碼更加整齊,層次更加分明。多態(tài)這一特點很好的解決了程序函數(shù)同名的問題,如:同一個加法函數(shù)方法,參數(shù)的個數(shù)不一樣,利用多態(tài)便可以根據(jù)參數(shù)列表調(diào)用需要的方法。
其實多態(tài)很簡單的,不要把它理解的過難。
每個Java程序的引用變量(你這個里面引用變量就是a),都有編譯類型和運行類型。編譯就是將 .java文件編譯成 .class文件,而運行就是 .class文件在操作系統(tǒng)上運行。
那么,這個時候,就出現(xiàn)多態(tài)了,一個類,他在編譯時期和運行時期相同的動作卻出現(xiàn)了不同的結(jié)果。Animal a = new Cat(); 如你的這個,a在編譯的時候,只能調(diào)用Animal里面的方法和屬性,而不能調(diào)用Cat的方法和屬性。
要注意的是,這樣寫Animal a = new Cat(); 后面的Cat必須繼承Animal類,為了出現(xiàn)多態(tài),Cat類中必須重寫Animal的方法。所謂重寫,就是要有和父類Animal中有一模一樣的方法。
編譯的時候,a調(diào)用的是自己的方法,我們可以預(yù)測結(jié)果,但是運行的時候,卻出現(xiàn)了不同的結(jié)果,因為他這個時候調(diào)用的是Cat的方法,這就是多態(tài)。
多態(tài)呢,很簡單,面向?qū)ο髥幔瑒游锸强傤悾肿约禾囟ǚ椒ǎ^承與他的其他動物也有這個特定方法,但是他們方法結(jié)果不一樣的。
多態(tài),也僅僅是指類的方法,與屬性沒有任何關(guān)系。
Animal a = new Cat(); a這個引用變量指向了Cat這個對象。
優(yōu)點是:統(tǒng)一化
網(wǎng)站題目:多態(tài)怎么減少代碼JAVA 多態(tài)代碼示例
地址分享:http://chinadenli.net/article12/hjigdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)頁設(shè)計公司、電子商務(wù)、網(wǎng)站制作、搜索引擎優(yōu)化、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)