多態(tài)性--java10

面向?qū)ο蟮奶卣魅?b>多態(tài)性

1、多態(tài)性指的是什么?多態(tài)性,可以理解為一個(gè)事物的多種表現(xiàn)形態(tài)。

1)方法的重載與重寫(xiě) ? ? ?2)子類(lèi)對(duì)象的多態(tài)性 ? ? ? ? ?

2、子類(lèi)對(duì)象使用多態(tài)性的前提:①要有繼承②要有子類(lèi)方法對(duì)父類(lèi)的重寫(xiě)③父類(lèi)的引用指向子類(lèi)的對(duì)象。

3、程序運(yùn)行分為編譯狀態(tài)和運(yùn)行狀態(tài)。

對(duì)多態(tài)性來(lái)說(shuō),編譯時(shí),“看左邊”,將此引用變量理解為父類(lèi)的類(lèi)型。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 運(yùn)行時(shí),“看右面”,關(guān)注于真正對(duì)象的實(shí)體:子類(lèi)的對(duì)象。那么執(zhí)行的對(duì)象就是子類(lèi)的重寫(xiě)。

4、子類(lèi)方法的多態(tài)性,并不適用于屬性。是根據(jù)左邊來(lái)確定的。 ?類(lèi)屬于重寫(xiě)或覆蓋,所以調(diào)用的時(shí)候是調(diào)用子類(lèi)的方法,而屬性沒(méi)有多態(tài)性,子類(lèi)和父類(lèi)同名的屬性會(huì)同時(shí)存在,是調(diào)用左邊即父類(lèi)的屬性。

public static void main(String[] args) {

Person p = new Person();

p.eat();

p.walk();


Man m = new Man();

m.eat();

m.walk();

//子類(lèi)對(duì)象的多態(tài)性:父類(lèi)的引用指向子類(lèi)的對(duì)象。

Person p1 = new Man(); //向上轉(zhuǎn)型man-->person

//虛擬方法調(diào)用:通過(guò)父類(lèi)的引用指向子類(lèi)的對(duì)象實(shí)體,當(dāng)調(diào)用方法時(shí),實(shí)際執(zhí)行的是子類(lèi)重寫(xiě)父的方法。

p1.eat();//輸出的是子類(lèi)的信息

p1.walk();//輸出的是子類(lèi)的信息

p1.smoking();//錯(cuò)誤,因?yàn)镻erson類(lèi)中并沒(méi)有Man類(lèi)的方法。

}

p1.smoking();//錯(cuò)誤,p1定義為person類(lèi),因?yàn)镻erson類(lèi)中并沒(méi)有Man類(lèi)的方法,所以會(huì)出錯(cuò)。但是如果person類(lèi)對(duì)象非要調(diào)用Man類(lèi)的方法的話,則需要向下轉(zhuǎn)型,將p1向下轉(zhuǎn)型為Man類(lèi)。

Man m = (Man) p1; ?//向下轉(zhuǎn)型 person類(lèi)-->man類(lèi)

m.smoking(); ?//正確運(yùn)行


基本數(shù)據(jù)類(lèi)型的轉(zhuǎn)型:向下轉(zhuǎn)型 ?和 ?向上轉(zhuǎn)型

高級(jí)的基本數(shù)據(jù)類(lèi)型---------->較低級(jí)的基本數(shù)據(jù)類(lèi)型(基本類(lèi)型轉(zhuǎn)換)

低級(jí)的基本數(shù)據(jù)類(lèi)型---------->較高級(jí)的基本數(shù)據(jù)類(lèi)型(強(qiáng)制類(lèi)型轉(zhuǎn)換)


父類(lèi)(如Person)----->子類(lèi)(如Man),向下轉(zhuǎn)型,使用instanceof判斷,Man m = (Man) p1, p1原先屬于person類(lèi),使用強(qiáng)轉(zhuǎn)符()

子類(lèi)(如Man)----->父類(lèi)(如Person),向上轉(zhuǎn)型,Person ?p1 = new Man();

注:但是要把一個(gè)Man強(qiáng)制類(lèi)型轉(zhuǎn)換成一個(gè)Woman類(lèi)型,編譯時(shí)并不會(huì)報(bào)錯(cuò),但是運(yùn)行時(shí)會(huì)報(bào)錯(cuò),類(lèi)型轉(zhuǎn)換錯(cuò)誤(java.lang.ClassCastException)。


instanceof:

格式:對(duì)象a ?instanceof 類(lèi)A,判斷對(duì)象a是否屬于類(lèi)A的一個(gè)實(shí)例,若是,則返回true,否則返回false。 ? ?若對(duì)象a是A類(lèi)的一個(gè)實(shí)例,那么也一定是A類(lèi)的父類(lèi)的實(shí)例。

if(p1 instanceof Woman){

Woman w1 =(Woman) p1;

w1.shopping();}

if(p1 instanceof Man){

Man m1 =(Man) p1;

m1.smoking();}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容