Java筆記--多態(tài)
一、多態(tài)介紹
同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。

二、多態(tài)前提
1、有繼承/實(shí)現(xiàn)關(guān)系
2、有方法重寫
3、有父類引用指向子類對象
我們在這里創(chuàng)建一個抽象類和兩個子類,然后子類將父類方法重寫。

接著我們用父類引用指向子類對象

我們可以發(fā)現(xiàn),左右兩邊的類型并不相同但是并沒有報錯。
三、多態(tài)的好處
1、對象多態(tài):
前面我們用父類引用可以指向子類對象就是對象多態(tài)的一個例子。
2、行為多態(tài):
我們在主方法下面創(chuàng)建一個新的方法,然后將方法的形參設(shè)置為父類對象。

然后我們將兩個子類對象分別傳入父類方法中

發(fā)現(xiàn)方法中可以接收兩種子類對象。

四、多態(tài)中成員訪問特點(diǎn)
1、成員變量:編譯看左邊(父類),運(yùn)行看左邊(父類)
我們先創(chuàng)建一個父類和一個子類,將父類中的num定義為10,將子類中的num定義為20,然后我們用父類引用去指向子類對象,然后打印出對象num變量的值。


我們會看到,打印出的num值是父類中的值。
2、成員方法:編譯看左邊(父類),運(yùn)行看右邊(子類)
我們用對象去調(diào)用成員方法

發(fā)現(xiàn)結(jié)果走的是子類的成員方法

因?yàn)槌绦驎?dān)心調(diào)用的父類的方法是一個抽象方法,所以會走子類的重寫方法。
3、特殊情況:
前面我們說過建議被static修飾的成員變量和成員方法,建議使用類名去調(diào)用。在多態(tài)中假如我們?nèi)ナ褂脤ο竺{(diào)用靜態(tài)的static成員方法,程序會運(yùn)行父類的方法,因?yàn)樵谧止?jié)碼文件生成之后,程序會自動將對象名改為類名去調(diào)用。
五、多態(tài)的好處和弊端
1、好處:提高了程序的擴(kuò)展性
2、弊端:不能使用子類特有的成員
六、多態(tài)中的轉(zhuǎn)型
1、向上轉(zhuǎn)型
從子到父:父類引用指向子類對象
將子類對象的地址賦值給父類引用


2、向下轉(zhuǎn)型
從父到子:將父類引用所指的對象,轉(zhuǎn)交給子類類型。

這里不能直接賦值,必須做強(qiáng)制類型轉(zhuǎn)換。
七、注意事項:
當(dāng)我們用轉(zhuǎn)型去調(diào)用對象的方法時,很容易報錯,因?yàn)槲覀儾荒芘袛噙@個對象是不是這個類的成員。

我們可以利用if語句和instanceof關(guān)鍵字來判斷左邊的引用是不是右邊的數(shù)據(jù)類型。

Java筆記--多態(tài)的評論 (共 條)
