多態對於基礎不太好的同學不太好理解,下面談談我對它的認識。它和繼承是相對的,繼承是子類調用父類,多態則是父類使用子類。在繼承中子類可以使用父類中公有的方法和屬性等,而在多態中,簡單的說,建立一個父類的對象,它的內容可以是這個父類的,也可以是它的子類的,當子類擁有和父類同樣的函數,當使用這個對象調用這個函數的時候,定義這個對象的類(也就是父類)裡的同名函數將被調用,當在父類裡的這個函數前加virtual關鍵字或父類為一個介面,那麼子類的同名函數將被調用。
下邊是一段C#代碼來解釋多態
class Test { staticvoid Main(string[]args) { Testtt = new Test(); tt.PlayVideo(); } public voidPlayVideo() { videoShowvw; vw=newDVD() ; Console.WriteLine(vw.PlayVideo()); vw = newVCD(); Console.WriteLine(vw.PlayVideo()); } } public abstractclass videoShow { publicabstract stringPlayVideo(); } public class VCD : videoShow { publicoverride stringPlayVideo() { return"現正播放VCD"; } } public class DVD : videoShow { publicoverride stringPlayVideo() { return"現正播放DVD"; } }
在上面的代碼中我們使用父類videoShow執行個體化了一個對象vw,在下面我們使用父類的對象調用了子類中的方法PlayVideo。
由多態我們還引出了向上轉型和向下轉型的概念:
向下轉型:父類不一定能轉成子類類型
向上轉型:子類一定能轉成父類類型
舉一個形象的例子就是:
多態: java程式員包括j2se的,J2ee的,j2me的。
向上轉型: j2ee的 轉成 java程式員
向下轉型: java程式員 轉成 j2ee的