标签:
一、抽象方法和抽象类
在OOP语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法做为外部代码访问其的接口。而抽象方法就是为了方便继承而引入的。
抽象方法:当类中有一个方法,他没有方法体,也就是没有花括号,直接分号结束,象这种方法我们叫抽象方法,必须使用关键字abstract定义。
例如:public abstract function fun();
抽象类:包含抽象方法的类必须是抽象类也要使用关键字abstract加以声明。(即使用关键字abstract 修饰的类为抽象类)
抽象类的特点:
不能实例化,也就new成对象
若想使用抽象类,就必须定义一个类去继承这个抽象类,并定义覆盖父类的抽象方法(实现抽象方法)。
其实抽象类对于子类(实现类),有一个约束的作用。子类继承一个抽象父类必须实现父类中的所有抽象方法(除非它也是一个抽象类)
注意:含有抽象方法的类肯定是抽象类,但是不是所有的抽象类都必须包含抽象方法。
1 <?php 2 //抽象类父类A 3 abstract class A 4 { 5 public function fun1() 6 { 7 echo "fun1()...<br/>"; 8 } 9 10 public function fun2() 11 { 12 echo "fun2()...<br/>"; 13 } 14 15 public abstract function fun3(); 16 17 /** 18 *求和方法 19 * @param int $a 被求和参数1 20 * @param int $b 被求和参数2 21 * @return int 返回求和结果 22 */ 23 public abstract function add($a,$b); 24 25 } 26 27 class B extends A 28 { 29 public function fun3() 30 { 31 echo "fun3()...<br/>"; 32 } 33 34 public function add($x,$y) //这就是约束:函数名必须是add,参数必须有两个 35 { 36 return $x+$y; 37 } 38 } 39 40 $b = new B(); 41 $b->fun1(); 42 $b->fun2(); 43 $b->fun3(); 44 echo $b->add(10,20); 45 ?>
二、接口
PHP与大多数面向对象编程语言一样,不支持多重继承,也就是说每个类只能继承一个父类。为了解决这个这个问题,PHP引入了接口,接口的思想是指定了一个实现了该接口的类必须实现的一系列函数。
接口:如果在一个抽象类中包含的只有抽象方法,可以将其定义为interface(接口),用implements(实现)关键字使用它。
定义格式:
interface 接口名称
{
//常量成员 (使用const关键字定义)
//抽象方法 (不需要使用abstract关键字)
}
使用格式: class 类名 implements 接口名1,接口名2{ ... ... }
当一个类在实现了一个接口后,它必须实现即覆盖该接口的所有方法才可以实例化使用,否则即为抽象类。
1 <?php 2 //接口 3 interface A 4 { 5 public function fun1(); 6 7 public function fun2(); 8 9 public function fun3(); 10 11 } 12 13 //定义了类B实现接口A 14 abstract class B implements A 15 { 16 public function fun1() 17 { 18 echo "fun1()...<br/>"; 19 } 20 public function fun2() 21 { 22 echo "fun2()...<br/>"; 23 } 24 25 } 26 class C extends B 27 { 28 public function fun3() 29 { 30 echo "fun3()...<br/>"; 31 } 32 } 33 34 $b = new C(); 35 $b->fun1(); 36 $b->fun2(); 37 $b->fun3(); 38 ?>
三、抽象类与接口的区别
定义:
抽象类表示该类中可能已经有一些方法的具体定义。
接口就仅仅只能定义各个方法的界面,不能有具体的实现代码在成员方法中。
用法:
抽象类是子类用来继承的,当父类已有实际功能的方法时,该方法在子类中可以不必实现。
实现一个接口,必须实现接口中所有定义的方法,不能遗漏任何一个。
理解: 接口就像公司老板(每年定下一系列目标,不去做,只提出各种计划)
抽象类就像公司各层级经理(配合老板定下的计划,实现一部分,分发一部分任务员工)
最终继承的类就是普通员工(接收经理分发的任务,按照要求,毫不遗漏的完成)
四、多态
对象的多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在父类及其各个子类中具有不同的语义。
为什么要多态?
多态可以使程序可扩展性更强,减少代码更改量。
实现多态的方法:继承(重写)、抽象、接口。
例如:"几何图形"的"绘图"方法,"椭圆"和"多边形"都是"几何图"的子类,其"绘图"方法功能不同。
1 <?php 2 //多态 3 //主板上的PCI插槽接口 4 abstract class PCI 5 { 6 public abstract function start(); 7 public abstract function stop(); 8 } 9 10 //主板类 11 class MainBoard 12 { 13 public function running(PCI $pci) 14 { 15 $pci->start(); 16 $pci->stop(); 17 } 18 } 19 20 //声卡厂家 21 class SoundCard extends PCI 22 { 23 public function start() 24 { 25 echo "声卡启动...<br/>"; 26 } 27 28 public function stop() 29 { 30 echo "声卡停止...<br/>"; 31 } 32 } 33 34 //网卡厂家 35 class NetWorkCard extends PCI 36 { 37 public function start() 38 { 39 echo "网卡启动...<br/>"; 40 } 41 42 public function stop() 43 { 44 echo "网卡停止...<br/>"; 45 } 46 } 47 48 49 //使用:主程序 50 $mb = new MainBoard(); 51 $sc = new SoundCard(); 52 $nc = new NetworkCard(); 53 54 $mb->running($sc); 55 $mb->running($nc); 56 ?>
标签:
原文地址:http://www.cnblogs.com/yexiang520/p/5665246.html