- 抽象类:含有抽象方法的类【abstract 抽象关键词】
1 abstract class Usb 2 { 3 public function load(){ 4 echo "<p>Usb is loading</p>"; 5 } 6 7 public function start(){ 8 echo "<p>Usb is starting</p>"; 9 } 10 11 # 抽象方法 12 abstract public function unload(); 13 } 14 15 # 子类 16 class Upan extends Usb 17 { 18 # 调用需先实现unload抽象方法 19 public function unload(){ 20 echo "<p>Usb is unloading</p>"; 21 } 22 23 public function jitui(){ 24 echo "<p>我喜欢鸡腿</p>"; 25 } 26 } 27 28 $obj = new Upan(); 29 $obj->load();
- 接口:只含有抽象方法的类【interface、abstract 抽象关键词】
1 interface Usb 2 { 3 public function load(); 4 5 public function start(); 6 7 public function unload(); 8 } 9 10 # 子类 11 class Upan implements Usb 12 { 13 public function load(){ 14 echo "<p>Usb is loading</p>"; 15 } 16 17 public function start(){ 18 echo "<p>Usb is starting</p>"; 19 } 20 21 public function unload(){ 22 echo "<p>Usb is unloading</p>"; 23 } 24 } 25 26 # 调用前需全部实现Usb类中的抽象方法 27 $obj = new Upan(); 28 $obj->load();
- 一个子类实现多个接口
1 interface Usb 2 { 3 public function load(); 4 5 public function start(); 6 7 public function unload(); 8 } 9 10 interface Usb2 11 { 12 public function run(); 13 } 14 15 # 子类 16 class Upan implements Usb,Usb2 17 { 18 public function load(){ 19 echo "<p>Usb is loading</p>"; 20 } 21 22 public function start(){ 23 echo "<p>Usb is starting</p>"; 24 } 25 26 public function unload(){ 27 echo "<p>Usb is unloading</p>"; 28 } 29 30 public function run(){ 31 echo "<p>Usb2 is runing</p>"; 32 } 33 } 34 35 $obj = new Upan(); 36 $obj->load();
- 接口扩展,只能继承不能实现,一般不常用
1 interface Usb 2 { 3 public function load(); 4 5 public function start(); 6 7 public function unload(); 8 } 9 10 interface Usb2 extends Usb 11 { 12 public function run(); 13 } 14 15 # 子类 16 class Upan implements Usb2 17 { 18 public function load(){ 19 echo "<p>Usb is loading</p>"; 20 } 21 22 public function start(){ 23 echo "<p>Usb is starting</p>"; 24 } 25 26 public function unload(){ 27 echo "<p>Usb is unloading</p>"; 28 } 29 30 public function run(){ 31 echo "<p>Usb2 is runing</p>"; 32 } 33 } 34 35 $obj = new Upan(); 36 $obj->load();
- 多态小实例
1 interface Usb 2 { 3 public function load(); 4 5 public function start(); 6 7 public function unload(); 8 } 9 10 # 子类 11 class Upan implements Usb 12 { 13 public function load(){ 14 echo "<p>Usb is loading</p>"; 15 } 16 17 public function start(){ 18 echo "<p>Usb is starting</p>"; 19 } 20 21 public function unload(){ 22 echo "<p>Usb is unloading</p>"; 23 } 24 25 public function run(){ 26 echo "<p>Usb2 is runing</p>"; 27 } 28 } 29 30 # 非法类 31 class Udisk 32 { 33 public function load(){ 34 echo "<p>Usb is loading</p>"; 35 } 36 37 public function start(){ 38 echo "<p>Usb is starting</p>"; 39 } 40 41 public function unload(){ 42 echo "<p>Usb is unloading</p>"; 43 } 44 } 45 46 # 只有实现了Usb接口中所有方法才能正常调用 47 function useUsb(Usb $o){ 48 $o->load(); 49 $o->start(); 50 $o->unload(); 51 echo "<hr>"; 52 } 53 54 $obj = new Upan(); 55 $obj2 = new Udisk(); 56 useUsb($obj); 57 useUsb($obj2); #失败
转载于:https://www.cnblogs.com/yachyu/p/10707609.html