類和對象淺談(3)

我們之前寫了封裝和繼承(類和對象的三大特性中的兩種),今天我來說說三大特性中的第三種:多態(polymorphism) ,什麼叫多態?專業術語有點繞口,先用自己的話描述一下就是一個老祖宗下面有好多子女,然後這個這些子女又好多子女 依次往下 無休無止,雖然繁衍出了很多新人,但是卻有着相同血脈,這就是生活中典型的多態應用(有點點偏頗,不正之處望大神賜教),而java中的老祖宗就是Object類,所有的類都繼承了Object類。專業的多態解釋:指允許不同類的對象對同一消息做出響應。即同一消息可以根據發送對象的不同而採用多種不同的行爲方式。(發送消息就是函數調用)
多態分兩種:
(1) 編譯時多態:編譯時動態重載(overload);
(2) 運行時多態:指一個對象可以具有多個類型,方法的覆蓋(override)
這樣對於對象而言分爲:
理解運行時多態:
Car c = new Bus();
Car編譯時類型 編譯時檢查變量類型是否存在,是否有調用的方法。
Bus運行時類型 實際運行是訪問heap中的對象,調用實際的方法。
運行時多態是由運行時類型決定的
編譯時多態是由編譯時類型決定的
可能大家對重載(overload)和重寫(override)還很模糊 甚至以爲他倆是一回事,其實不然,據我自己的理解重載是根據參數的類型和個數區別的,而重寫就是繼承父類中的方法,然後根據當前類的具體實現功能重新把原來父類中的方法重新實現,所以現在看重載和重寫根本就不搭邊,別被外表迷惑了雙眼哦。。。
多態是有前提的 這個我就不寫代碼了 ,先理解,然後後面會用得很多的:
1, 要有繼承
2,要有重寫(override)
3,要有父類指向子類的應用 太繞了吧 其實就這樣(Car c = new Bus(); )前提是Bus繼承了Car。
所以我們前面說的封裝,繼承都是爲多態打基礎的,然而多態的實現是需要繼承,藉口去實現的,在下一篇中我會把抽象類(abstract)和接口(interface)好好聊聊,大神們,今天多態沒有舉代碼實例,並不代表他不重要 ,他是java中的精髓,我們時刻都會用到它 只不過沒發現而已。。哈哈 不扯淡了 今天就扯到這

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章