面向對象程序設計的三大原則是封裝性、繼承性、多態(tài)性。
這里主要說一下多態(tài)性,在說多態(tài)之前先說幾個概念:
將一個方法調(diào)用同一個方法主體連接到一起就稱為“綁定”(Binding)。
若在程序運行前執(zhí)行綁定(由編譯器和鏈接程序完成——如果有的話),就叫作“早期綁定”。
Java在運行時動態(tài)的調(diào)用方法,這叫后期綁定(late binding,后期綁定也叫作“動態(tài)綁定”或“運行時間綁定”)。
注:final方法不能被重載,對方法的調(diào)用可以在編譯時解決,這屬于早期綁定。
Java的所有方法綁定都采用“后期綁定”技術,除非一個方法已被明確聲明成final。也就是說,我們通常不必關心是否會進行后期綁定——它是自動進行的。
多態(tài)性是指允許不同類的對象對同一消息作出響應。做個簡單比喻:你兒子喊你,你會說:“嗨,兒子”。你父親喊你,你會說:“嗨,爸爸。”。對同一消息(有人喊你),做出的反應不同(做出不同的反應)。
常見的兩種多態(tài)方式為:① 重寫 ② 重載
重寫(Overriding)是父類與子類之間多態(tài)性的一種表現(xiàn),如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調(diào)用子類中的定義,而父類中的定義則被“屏蔽”了。
注意:
1、 方法名稱一定要一樣
2、 返回值的數(shù)據(jù)類型要一樣。
3、 所使用的參數(shù)要一樣,包括參數(shù)個數(shù)及每個參數(shù)的數(shù)據(jù)類型也要一樣。
4、 限定詞的使用權限只能越開放,不能越封閉。
5、 類方法不能被重寫,只有未使用static限定詞的方法可以被重寫。
重載(Overloading)是一個類中多態(tài)性的一種表現(xiàn)。如果在一個類中定義了多個同名的方法,它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
為什么要重載方法?
重載方法允許Java支持運行時多態(tài)性。多態(tài)性是面向對象編程的本質,原因如下:它允許通用類指定方法,這些方法對該類的所有派生類都是公用的。同時該方法允許子類定義這些方法中的某些或全部的特殊實現(xiàn)。重載方法是Java實現(xiàn)它的多態(tài)性—“一個接口,多個方法”的另一種方式。
構造函數(shù)可以從超類那里繼承,也可以互相重載。類的若干個構造函數(shù)可以相互調(diào)用,一個構造函數(shù)調(diào)用另一構造函數(shù)時,可以使用關鍵字this。同時,這個調(diào)用語句應該是整個構造函數(shù)的第一個可執(zhí)行語句。
參考:Thinking.in.Java簡體中文第二版