這是一篇遲來的更新,由於它應該在前兩天就被更新了,可是因爲我英語四級沒過!沒過!沒過!致使我心情低落,因此就玩了幾天的遊戲,哦不,進行了幾天反思,痛定思痛 痛何如哉!php
如下都是我我的的理解,有錯的地方還望不吝賜教。
爲何須要繼承?
繼承就是 一個子類經過extends父類把父類的屬性和方法繼承下來。
假設如今如今須要寫兩個類,小學生類和高中生類,小學生會說話,走路,考試,高中生也會說話走路,考試,那麼若是你寫兩遍說話,走路,考試,那麼就會顯得臃腫,管理起來也會麻煩不少,若是定義一個類叫作學生類包含說話,走路,考試,而後讓小學生類和高中生類來繼承這個學生類就會顯得好不少,好比這樣。學習
<?php class student{ function speak(){ echo '說話'; } function walk(){ echo '走路'; } function test(){ echo '考試'; } } class pupil extends student{ function test(){ echo '小學生考試'; } } class senior extends student{ function test(){ echo '高中生考試'; } } $pupil=new pupil(); $pupil->speak(); $pupil->walk(); $pupil->test(); echo '<br />'; $senior=new senior(); $senior->speak(); $senior->walk(); $senior->test(); ?>
輸出:code
說話走路小學生考試 說話走路高中生考試
這樣代碼管理起來就會好不少。
假設如今小學生要學習一個新的技能吃東西,我如今這樣寫。繼承
<?php class student{ function speak(){ echo '說話'; } function walk(){ echo '走路'; } function test(){ echo '考試'; } } class skill{ function eat(){ echo '吃東西'; } } class pupil extends student,skill{ function test(){ echo '小學生考試'; } } $pupil=new pupil(); $pupil->speak(); $pupil->walk(); $pupil->test(); $pupil->eat(); ?>
若是這樣寫,那麼就會報錯:遊戲
Fatal error: Class 'studentskill' not found in D:\xampp\htdocs\1.php on line 18
由於php中是不能這樣實現多繼承的,若是想要實現多繼承能夠這麼寫:io
<?php class student{ function speak(){ echo '說話'; } function walk(){ echo '走路'; } function test(){ echo '考試'; } } class skill extends student{ function eat(){ echo '吃東西'; } } class pupil extends skill{ function test(){ echo '小學生考試'; } } $pupil=new pupil(); $pupil->speak(); $pupil->walk(); $pupil->test(); $pupil->eat(); ?>
輸出:function
說話走路小學生考試吃東西
先用一個skill類繼承student類,而後再用pupil類繼承skill類,這樣就至關於pupil類繼承了student類和skill類。class
方法重寫
若是要實現的兩個類有共同特徵,那麼就能夠將這個共同的特徵抽象出一個父類。
好比,有小學生類和中學生類,這樣的兩個類,他們都是學生,那麼就能夠抽象出一個學生類,學生都會考試,那麼就把考試這個方法寫在學生這個類裏面。
那麼問題就是,小學生是小學生的考試,中學生是中學生的考試,我不可能都輸出考試,這裏就用到了方法重寫。
在子類中定義一個與父類同樣的方法,這樣執行的時候,父類中的方法就會被覆蓋,從而輸出的只有子類中定義的方法。
舉例:test
<?php class student{ function test(){ echo '考試'; } } class pupil extends student{ function test(){ echo '小學生考試'; } } class senior extends student{ function test(){ echo '中學生考試'; } } $pupil=new pupil(); $pupil->test(); echo '<br />'; $senior=new senior(); $senior->test(); ?>
輸出:nio
小學生考試 中學生考試