Java面向?qū)ο笕筇匦灾鄳B(tài)

多態(tài)(Polymorphism)

1. 什么是多態(tài)呢?

多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(OOP)的一個重要特征,多態(tài)的字面意思就是多種狀態(tài)。在面向?qū)ο笳Z言中,同一操作作用于不同的對象,可以有不同的實現(xiàn)方式,產(chǎn)生不同的執(zhí)行結(jié)果。簡單的說來就是一句話:使用父類類型的引用指向子類的對象。

簡單例子:我們小時候每年過年要向長輩拜年,每年得到壓歲錢跟往年幾乎是一樣的。今年你學習成績優(yōu)秀,問聲“爺爺過年好”,爺爺很高興,很可能多給了你500塊錢(方法重寫)。問聲“叔叔過年好”,叔叔也很高興,也多給了你100塊錢(方法重寫)。對于拜年這個動作,對于不同的人,得到壓歲錢也不同,這就是多態(tài)。

public class NewYearMoney {
    public void getNewYearMoney(){
        System.out.println("往年拜年壓歲錢: 500塊");
    }
}

public class GrandpaNewYearMoney extends NewYearMoney {
    public void getNewYearMoney(){
        System.out.println("我今年給孫子壓歲錢: 1000塊");
    }
}

public class UncleNewYearMoney extends NewYearMoney {
    public void getNewYearMoney(){
        System.out.println("我今年給侄子壓歲錢: 600塊");
    }
}

public class HappyNewYear{
    public static void main(String[] args) {
        NewYearMoney n = new NewYearMoney();
        n.getNewYearMoney();

        NewYearMoney g = new GrandpaNewYearMoney();
        g.getNewYearMoney();

        NewYearMoney u = new UncleNewYearMoney();
        u.getNewYearMoney();
    }
}
// 往年拜年壓歲錢: 500塊
// 我今年給孫子壓歲錢: 1000塊
// 我今年給侄子壓歲錢: 600塊

2. 我們?yōu)槭裁匆枚鄳B(tài)?

我們知道,封裝可以隱藏實現(xiàn)細節(jié),使得代碼模塊化;繼承可以擴展已存在的代碼模塊(類);它們的目的都是為了——代碼重用。而多態(tài)除了提高代碼的復(fù)用性外,還可以解決項目中緊偶合的問題,提高程序的可擴展性.。耦合度講的是模塊模塊之間,代碼代碼之間的關(guān)聯(lián)度。通過對系統(tǒng)的分析把他分解成一個一個子模塊,子模塊提供穩(wěn)定的接口,達到降低系統(tǒng)耦合度的的目的,模塊模塊之間盡量使用模塊接口訪問,而不是隨意引用其他模塊的成員變量。 派生類的功能可以被基類的方法或引用變量所調(diào)用,這叫向后兼容,可以提高可擴充性和可維護性。

3. 多態(tài)分類

多態(tài)一般分為兩種:編譯時多態(tài)和運行時多態(tài)。

編譯時多態(tài)(重載式多態(tài)):也就是說這種多態(tài)在編譯時已經(jīng)確定好了。重載大家都知道,方法名相同而參數(shù)列表不同的一組方法就是重載。在調(diào)用這種重載的方法時,通過傳入不同的參數(shù)最后得到不同的結(jié)果。

有人覺得重載因為針對的是方法,不是面向?qū)ο缶幊趟枷胩赜械?。而面向?qū)ο蟮娜筇匦灾皇嵌鄳B(tài),由此可見,重載不是面向?qū)ο螅敲嫦蚍椒?,故不是多態(tài)。所以,我們暫且認為是特殊的多態(tài)吧。

運行時多態(tài)(重寫式多態(tài)):這種多態(tài)通過動態(tài)綁定(dynamic binding)技術(shù)來實現(xiàn),是指在執(zhí)行期間判斷所引用對象的實際類型,根據(jù)其實際的類型調(diào)用其相應(yīng)的方法。

4. 使用運行時多態(tài)要注意什么?

① JAVA運行時系統(tǒng)根據(jù)調(diào)用該方法的實例的類型來決定選擇調(diào)用哪個方法則被稱為運行時多態(tài)。
② Java多態(tài)運行的三個表要存在條件:繼承、重寫、父類引用指向子類對象。

寫完嘍!ㄟ(▔,▔)ㄏㄟ(▔,▔)ㄏㄟ(▔,▔)ㄏ


知識重在總結(jié)和梳理,只有不斷地去學習并運用,才能化為自己的東西。當你能為別人講明白的時候,說明自己已經(jīng)掌握了。

歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處!

如果有錯誤的地方,或者有您的見解,還請不嗇賜教!

喜歡的話,麻煩點個贊!

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

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

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