php抽象类的简单应用
抽象类也是面向对象中的重要概念,和接口、继承的概念重要性相当,在面向对象的开发中,所有的对象都是通过类来描述的,但是反过来,并不是所有类都是用来描绘对象的,广义上讲如果一个类中没有足够信息来描述一个具体的对象,这样的类就是抽象类。具体用简单的代码来实现:
1 abstract class ACanEat { 2 // 抽象方法需要在子类中实现 3 abstract public function eat($food); 4 5 public function breath(){ 6 echo "Breath use the air.<br />"; 7 } 8 } 9 10 // Human类继承了ACanEat抽象类 11 class Human extends ACanEat { 12 // 跟Animal类的实现是不同的 13 public function eat($food){ 14 echo "Human eating " . $food . "\n"; 15 } 16 } 17 18 // Animal类继承了ACanEat抽象类 19 class Animal extends ACanEat { 20 public function eat($food){ 21 echo "Animal eating " . $food . "\n"; 22 } 23 } 24 25 $man = new Human(); 26 $man->eat("Apple"); 27 $man->breath(); // 和Animal共用了抽象类ACanEat的breath方法 28 $monkey = new Animal(); 29 $monkey->eat("Banana"); 30 $monkey->breath();
从代码可以简单的看出,抽象类定义前面以abstract关键字开始,里面可以定义多个方法,可以具体实现,也可以定义为抽象方法,没有实现的方法需要设定为抽象方法,需要在最前面加abstract关键字,抽象方法需要在子类中实现,而普通方法子类可以不用重写,对象可以直接使用。
上面代码中,Human类和Animal类都继承了ACanEat抽象类,通过各自不同的方法实现了eat,但是两个类继承了相同的方法breath,这个属性可以认为是相同的,无论实例化哪个对象都可以使用相同的breath方法
所以,抽象类其实就是介于普通类和接口之间的一个类,普通类需要实现所有方法,接口所有方法都不需要实现,而抽象类可以根据自己的需要去选择实现部分方法;但是一旦类里面有抽象方法,这个类就必须是抽象类,另外注意,抽象类跟接口一样,不能直接实例化为对象,只能被普通类继承,,其实抽象类同样体现了面向对象的多态现象