1、抽象方法和抽象類程序員
1.抽象方法:一個方法若是沒有方法體(沒有{},直接分號結束,使用abstrract關鍵字修飾的方法),便是抽象方法code
2.抽象類:若是類中有一個方法是抽象方法,則這個類是抽象類,該類使用abstract來修飾對象
注意:繼承
1.抽象類中不必定必須有方法 2.抽象類中有抽象方法 3.抽象類不能建立對象 4.其餘方面與通常類徹底同樣 5.抽象類必須有子類,子類將抽象類的抽象方法覆蓋,就有方法體了 6.子類必須覆蓋所有抽象方法,才能建立對象,若是隻實現部分抽象方法,則子類仍是抽象類
3.抽象方法的做用:規定了子類必須有(覆蓋)這個方法,具體功能交給子類(按本身的功能)實現
4.抽象類的做用:抽象類要求了子類的結構,就是一個規範(程序員不能不寫某種方法)接口
abstract class Person { abstract function eat(); abstract function sleep(); function walk(){} }; class Men extends Person { function eat(){ echo "吃米飯<br>"; } function sleep(){ echo "睡牀<br>"; } }; class Women extends Person { function eat(){ echo "吃麪<br>"; } function sleep(){ echo "睡牀<br>"; } }; $s=new Men; $s->eat();//吃米飯
2、面向對象的接口技術io
1.接口是一種特殊的抽象類(有抽象類全部特性)function
2.接口與通常抽象類的區別(接口也是一種規範)class
a.接口內全部方法必須全是抽象方法 b.接口中屬性必須是常量(const聲明) c.接口內權限必須是public(默認便是,沒必要聲明),抽象類能夠有protected d.聲明接口不使用class,而是interface e.接口中的抽象方法不須要abstract特殊聲明,由於都是 f.能夠用類::訪問屬性/方法
interface Demo { const NAME="wo"; function test(); }
3.接口的特性test
a.接口能夠繼承另外一個接口(extends),但只有擴展關係,沒有覆蓋關係 b.可使用通常類實現接口的*所有方法*(抽象方法必須所有覆蓋),即有覆蓋關係 c.可使用抽象類來實現接口的*部分方法*,即有覆蓋關係 d.只要是覆蓋關係,即便用類/抽象類來實現接口,就要用implements關鍵字 e.extends:一個類只能有一個父類 f.implements:能夠在使用extends繼承其餘類的同時,進行對接口的實現,能夠實現多個接口(必定要先extends,再implements) g.實現多個接口,以逗號分開多個接口名便可
interface Demo { const NAME="wo"; function test1(); function test2(); }; interface Test extends Demo { function test3(); }; class World { function test4(){ } }; interface Abc { function test5(); } class Fina extends World implements Test,Abc { function test1(){ echo "test1<br>"; } function test2(){ echo "test2<br>"; } function test3(){ echo "test3<br>"; } function test4(){ echo "test4<br>"; } function test5(){ echo "test5<br>"; } }; $p=new Fina; $p->test1();//test1 $p->test2();//test2 $p->test3();//test3 $p->test4();//test4 $p->test5();//test5
3、多態性(各個子類的形態功能不一樣)擴展
1.必須有繼承關係,父類最好是接口或抽象類,以下爲模擬USB接口下鼠標和鍵盤的多態,以及使用者進行調用的狀況
interface USB { const WIDTH = 12; const HEIGHT = 3; function load(); function run(); function stop(); }; class Mouse implements USB { function load(){ echo "加載鼠標成功!<br>"; } function run(){ echo "運行鼠標功能!<br>"; } function stop(){ echo "鼠標工做結束!<br>"; } }; class Keyboard implements USB { function load(){ echo "加載鍵盤成功!<br>"; } function run(){ echo "運行鍵盤功能!<br>"; } function stop(){ echo "鍵盤工做結束!<br>"; } }; class Computer { //只要是繼承自USB抽象類的對象,不論什麼設備,都執行三個方法 function useUSB(USB $usb){ $usb->load(); $usb->run(); $usb->stop(); } }; class Workers { function work(){ $c=new Computer; $m=new Mouse; $k=new Keyboard; $c->useUSB($m); $c->useUSB($k); } }; $w=new Workers; $w->work(); //加載鼠標成功! //運行鼠標功能! //鼠標工做結束! //加載鍵盤成功! //運行鍵盤功能! //鍵盤工做結束!