1.概念:父類的引用可以指向不同子類對(duì)象宁玫,從而導(dǎo)致父類引用的多種形態(tài)丛肮。
2.語(yǔ)法:父類類名 引用名=new 子類類名(構(gòu)造參數(shù));
父類類型 子類類型
父類引用 子類對(duì)象
主觀認(rèn)為類型 客觀實(shí)際類型
3.特點(diǎn):
① 子類對(duì)象類型洲守,始終不變;
② 編譯時(shí)儿奶,使用父類引用只能調(diào)用父類中聲明的方法或?qū)傩钥蛲豢梢哉{(diào)用子類獨(dú)有
的屬性和方法;
③ 運(yùn)行時(shí)闯捎,如果子類覆蓋了父類中的方法椰弊,則執(zhí)行子類中覆蓋的方法,否則執(zhí)行從
父類繼承到的方法瓤鼻。
4.對(duì)象類型 的 類型轉(zhuǎn)換
① 子類對(duì)象 賦值給 父類引用
Animal a=new Dog();
結(jié)論:多態(tài)(父類引用 指向 子類對(duì)象)
② 父類引用 賦值給 子類引用(小類型= 大類型)
Animal a=new Dog();
Dog
d=(Dog)a;
結(jié)論:父類引用賦值給子類引用秉版,必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換(只保證編譯OK);
運(yùn)行時(shí)娱仔,可能會(huì)出現(xiàn)java.lang.ClassCastException類型轉(zhuǎn)換異常沐飘。
③ 不存在繼承關(guān)系的對(duì)象 相互賦值
Dog d=new Dog();
Person p=(Person)d; //Error,沒(méi)有關(guān)系
結(jié)論:不存在繼承關(guān)系的對(duì)象,不允許相互轉(zhuǎn)換牲迫。
instanceof
① 語(yǔ)法: 引用名 instanceof 類名
判斷引用指向的對(duì)象和后面的類型耐朴,是否兼容:兼容-true;不兼容-false。
② 作用:先判斷真實(shí)類型盹憎,再進(jìn)行向下轉(zhuǎn)型筛峭,可以避免轉(zhuǎn)換類型異常。
③ 例:
Animal a = new Dog();
a instanceof Dog //true
a instanceof Cat //false
a instanceof Animal //true
6.多態(tài)在開(kāi)發(fā)中的應(yīng)用
① 多態(tài)應(yīng)用在方法的參數(shù)上
調(diào)用方法時(shí)陪每,可以傳的實(shí)參類型包括 父類和其所有的子類對(duì)象影晓。
② 多態(tài)應(yīng)用在返回值上
調(diào)用方法后镰吵,可以得到的結(jié)果類型包括 父類和其所有的子類對(duì)象。
7.多態(tài)的好處
對(duì)使用者 屏蔽各子類間的不同差異挂签,使得方法的調(diào)用更簡(jiǎn)單疤祭、通用。