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