摘要:概念所謂多態(tài),就是指一個(gè)引用變量類(lèi)型在不同的情況下的多種狀態(tài)。需進(jìn)行強(qiáng)制轉(zhuǎn)換有風(fēng)險(xiǎn),最好使用進(jìn)行判斷。繼承在多態(tài)中必須存在有繼承關(guān)系的子類(lèi)和父類(lèi)。在中有兩種形式可以實(shí)現(xiàn)多態(tài)繼承和接口。
概念
所謂多態(tài),就是指一個(gè)引用變量(類(lèi)型)在不同的情況下的多種狀態(tài)。也可以理解為,多態(tài)是指通過(guò)指向父類(lèi)的指針,來(lái)調(diào)用在不同子類(lèi)中實(shí)現(xiàn)的方法。多態(tài)性是對(duì)象多種表現(xiàn)形式的體現(xiàn)
多態(tài)性嚴(yán)格來(lái)說(shuō)有兩種描述形式:
方法的多態(tài)性:
方法的重載
方法的重寫(xiě)
對(duì)象的多態(tài)性: 指的是發(fā)生在繼承關(guān)系類(lèi)之中,子類(lèi)和父類(lèi)之前的轉(zhuǎn)換問(wèn)題
向上轉(zhuǎn)型 : 父類(lèi) 父類(lèi)對(duì)象 = 子類(lèi)實(shí)例
向下轉(zhuǎn)型 : 子類(lèi) 子類(lèi)對(duì)象 = (子類(lèi))父類(lèi)實(shí)例 。 需進(jìn)行強(qiáng)制轉(zhuǎn)換,有風(fēng)險(xiǎn),最好使用 instanceof 進(jìn)行判斷。
class A { public void fun(){ System.out.println("A "); } } class B extends A{ public void fun(){ //重寫(xiě)父類(lèi)方法 System.out.println("B"); } } public class testDemo { public static void main(String[] args) { A a = new B(); //向上轉(zhuǎn)型 B b = (B)a; //向下轉(zhuǎn)型 a.fun(); // a.funb(); //父類(lèi)中不能調(diào)用子類(lèi)中擴(kuò)展的方法 b.fun(); System.out.println(a instanceof A); System.out.println(a instanceof B); System.out.println(b instanceof A); System.out.println("**********"); A a2 = new A(); System.out.println(a2 instanceof A); System.out.println(a2 instanceof B); } } 輸出結(jié)果: B B true true true ********** true false
Java實(shí)現(xiàn)多態(tài)有三個(gè)必要條件:繼承、重寫(xiě)、向上轉(zhuǎn)型。
繼承:在多態(tài)中必須存在有繼承關(guān)系的子類(lèi)和父類(lèi)。
重寫(xiě):子類(lèi)對(duì)父類(lèi)中某些方法進(jìn)行重新定義,在調(diào)用這些方法時(shí)就會(huì)調(diào)用子類(lèi)的方法。
向上轉(zhuǎn)型:在多態(tài)中需要將子類(lèi)的引用賦給父類(lèi)對(duì)象,只有這樣該引用才能夠具備技能調(diào)用父類(lèi)的方法和子類(lèi)的方法。
只有滿(mǎn)足了上述三個(gè)條件,我們才能夠在同一個(gè)繼承結(jié)構(gòu)中使用統(tǒng)一的邏輯實(shí)現(xiàn)代碼處理不同的對(duì)象,從而達(dá)到執(zhí)行不同的行為。
對(duì)于Java而言,它多態(tài)的實(shí)現(xiàn)機(jī)制遵循一個(gè)原則:當(dāng)超類(lèi)對(duì)象引用了子類(lèi)對(duì)象時(shí),被引用對(duì)象的類(lèi)型而不是引用變量的類(lèi)型決定了調(diào)用誰(shuí)的成員方法,但是這個(gè)被調(diào)用的方法必須是在超類(lèi)中定義過(guò)的,也就是說(shuō)被子類(lèi)覆蓋的方法。
多態(tài)分為編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。其中編輯時(shí)多態(tài)是靜態(tài)的,主要是指方法的重載,它是根據(jù)參數(shù)列表的不同來(lái)區(qū)分不同的函數(shù),通過(guò)編輯之后會(huì)變成兩個(gè)不同的函數(shù),在運(yùn)行時(shí)談不上多態(tài)。而運(yùn)行時(shí)多態(tài)是動(dòng)態(tài)的,它是通過(guò)動(dòng)態(tài)綁定來(lái)實(shí)現(xiàn)的,也就是我們所說(shuō)的多態(tài)性。
在Java中有兩種形式可以實(shí)現(xiàn)多態(tài):繼承和接口。
多態(tài)的優(yōu)點(diǎn)消除類(lèi)型之間的耦合關(guān)系
可替換性
可擴(kuò)充性
接口性
靈活性
簡(jiǎn)化性
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/73555.html
摘要:調(diào)用的是的方法,因?yàn)橄蛏限D(zhuǎn)型為,那么只能調(diào)用類(lèi)的方法,里參數(shù)有和兩種,所以對(duì)應(yīng)于對(duì)應(yīng)于對(duì)應(yīng)于,由于多態(tài)性,最終調(diào)用的是即由于是的子類(lèi),那么可以繼承的所有非方法,當(dāng)然的也在內(nèi),所以,就直接調(diào)用的是即 1.基于繼承覆蓋 子類(lèi)覆蓋父類(lèi)的方法,實(shí)現(xiàn)多態(tài) 抽象 子類(lèi)實(shí)現(xiàn)父類(lèi)的抽象方法,實(shí)現(xiàn)多態(tài) 2.基于接口 3.案例 摘自http://www.cnblogs.com/chenss... publ...
摘要:多態(tài)性面向?qū)ο笕筇匦苑庋b繼承多態(tài)。面向?qū)ο蠖鄳B(tài)性存在的三個(gè)必要條件繼承重寫(xiě)父類(lèi)引用指向子類(lèi)對(duì)象多態(tài)性的實(shí)現(xiàn)方式重寫(xiě)與重載靜態(tài)多態(tài)性方法重載方法重載允許類(lèi)具有多個(gè)相同名稱(chēng)的方法,但是方法參數(shù)列表不同。 多態(tài)性 面向?qū)ο螅∣OP)三大特性:封裝、繼承、多態(tài)。 多態(tài)性(polymorphism)指同一行為具有多種不同表現(xiàn)形式,在面向?qū)ο蟪绦蛟O(shè)計(jì)中表現(xiàn)為同一消息可以根據(jù)發(fā)送對(duì)象的類(lèi)型不同,做...
摘要:目錄介紹問(wèn)題匯總具體問(wèn)題好消息博客筆記大匯總年月到至今,包括基礎(chǔ)及深入知識(shí)點(diǎn),技術(shù)博客,學(xué)習(xí)筆記等等,還包括平時(shí)開(kāi)發(fā)中遇到的匯總,當(dāng)然也在工作之余收集了大量的面試題,長(zhǎng)期更新維護(hù)并且修正,持續(xù)完善開(kāi)源的文件是格式的同時(shí)也開(kāi)源了生活博客,從年 目錄介紹 00.Java問(wèn)題匯總 01.具體問(wèn)題 好消息 博客筆記大匯總【16年3月到至今】,包括Java基礎(chǔ)及深入知識(shí)點(diǎn),Android技...
摘要:也就是說(shuō),一個(gè)實(shí)例變量,在的對(duì)象初始化過(guò)程中,最多可以被初始化次。當(dāng)所有必要的類(lèi)都已經(jīng)裝載結(jié)束,開(kāi)始執(zhí)行方法體,并用創(chuàng)建對(duì)象。對(duì)子類(lèi)成員數(shù)據(jù)按照它們聲明的順序初始化,執(zhí)行子類(lèi)構(gòu)造函數(shù)的其余部分。 類(lèi)的拷貝和構(gòu)造 C++是默認(rèn)具有拷貝語(yǔ)義的,對(duì)于沒(méi)有拷貝運(yùn)算符和拷貝構(gòu)造函數(shù)的類(lèi),可以直接進(jìn)行二進(jìn)制拷貝,但是Java并不天生支持深拷貝,它的拷貝只是拷貝在堆上的地址,不同的變量引用的是堆上的...
摘要:具體而言就是高層模塊不依賴(lài)于底層模塊,二者都同依賴(lài)于抽象抽象不依賴(lài)于具體,具體依賴(lài)于抽象。 9.接口 9.1 抽象類(lèi)和抽象方法 抽象類(lèi):包含抽象方法的類(lèi),自身無(wú)法實(shí)例化 抽象方法:僅有聲明,沒(méi)有方法體 關(guān)系:抽象方法是抽象類(lèi)的充分不必要條件,因此抽象類(lèi)中允許方法實(shí)現(xiàn)和抽象方法同時(shí)存在 語(yǔ)法 // 抽象類(lèi) abstract class ClassName{} // 抽象方法 ab...
閱讀 1265·2021-11-10 11:35
閱讀 3017·2021-09-24 10:35
閱讀 3092·2021-09-22 15:38
閱讀 2889·2019-08-30 15:43
閱讀 1431·2019-08-29 18:39
閱讀 2685·2019-08-29 15:22
閱讀 2867·2019-08-28 18:17
閱讀 678·2019-08-26 13:37