多態(tài)描述的是同名方法可以根據(jù)發(fā)送消息的對象傳送參數(shù)的不同,采取不同的行為方式的特性。
面向?qū)ο笙到y(tǒng)中采用多態(tài),大大提高了程序的抽象程度和簡潔性,更重要的是,它最大限度地降低了類和程序模塊之間的耦合性,提高了類模塊的封閉性,使得它們不需了解對方的具體細(xì)節(jié),就可以很好地共同工作。
這一點對程序的設(shè)計、開發(fā)和維護都有很大的好處。
1 多態(tài)的概念
多態(tài)是指一個程序中同名的不同方法共存的情況。
這些方法同名的原因是它們的最終功能和目的都相同,但是由于在完成同一功能時,可能遇到不同的具體情況,所以需要定義含不同的具體內(nèi)容的方法,來代表多種具體實現(xiàn)形式。
Java 提供兩種多態(tài)機制:重載與覆蓋。
2 方法重載
在同一類中定義了多個同名而不同內(nèi)容的成員方法時,我們稱這些方法是重載(Override)的方法。
重載的方法主要通過形式參數(shù)列表中參數(shù)的個數(shù)、參數(shù)的數(shù)據(jù)類型和參數(shù)的順序等方面的不同來區(qū)分的。
在編譯期間,Java 編譯器檢查每個方法所用的參數(shù)數(shù)目和類型,然后調(diào)用正確的方法。
3 覆蓋
由于面向?qū)ο笙到y(tǒng)中的繼承機制,子類可以繼承父類的方法。
但是,子類的某些特征可能與從父類中繼承來的特征有所不同,為了
體現(xiàn)子類的這種個性,Java 允許子類對父類的同名方法重新進(jìn)行定義,即在子類中定義與父類中已定義的相同名而內(nèi)容不容的方法。
這種多態(tài)被稱為覆蓋(Overload)。
由于覆蓋的同名方法是存在于子類對父類的關(guān)系中,所以只需在方法引用時指明引用的是父類的方法還是子類的方法,就可以很容易地把它們區(qū)分開來。