6:多型
阿新 • • 發佈:2018-11-03
什麼是多型?
第一句話:一段程式碼,一個函式,一個類的多型性
第二句話:一段程式碼,一個函式,一個類的靈活性
- 從生活中說:轎車,會開車的人都會開,人會開車,那麼人可以開車,人猿會開車,那麼人猿可以開車,如果說,轎車只能讓人開,那是不是人猿就得創造一種猿車,專門供人猿開呢?這不是造成了資源的浪費嗎?
- 從程式中說:一個類,只負責輸出字串,那麼我要是給你傳一個物件的引數呢?你怎麼辦,你怎麼給我顯示這個物件,再寫一個專門輸出物件的類?那你的程式碼要寫多少行?別人理解你的程式碼得耗費多少時間?這難道不是金錢的損失嗎?
- 多型這個東西,沒有什麼具體的語言能具體描述,他就是說一個東西的靈活性好不好,而且,面向物件(OOP)本身就是為了提高效率,一定程度上簡化程式碼,達到複用的目的;
示例:
class Shoudiantong { public function ons(Glass $g){ $g->display(); } } class Glass { public function display(){} } class Hong extends Glass{ public function display(){ echo '紅玻璃 <br/>'; } } class Blue extends Glass{ public function display(){ echo '藍玻璃 <br/>'; } } class Tianpeng{ public function display(){ echo '天蓬元帥 <br/>'; } } $shoudiantong = new Shoudiantong(); $hong = new Hong(); $blue = new Blue(); $tianpeng = new Tianpeng(); $shoudiantong->ons($hong); $shoudiantong->ons($blue);
註釋
-
輸出一句話,只有Glass類的子類才能被呼叫方法;
-
子類是父類,正如男人是人,女人是人,金魚是魚,鯊魚是魚,千里馬也是馬;
-
里氏代換:原能用父類的場合,都可以用子類來代替
-
PHP本身不進行引數型別檢測,在PHP5.3以後,引入了物件型別的引數檢測,僅僅是在引數為物件的時候,型別檢測生效,普通的基本資料型別是不進行檢測的;
-
多型在弱型別的語言中(例如JavaSscript PHP Python)的存在感不是那麼強烈,但是在強型別的語言中(例如Java CPP C# C)顯示的表現就很強烈
-
重在思想,不在語法;