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 . "
";
15   }
16 }
17 
18 // Animal类继承了ACanEat抽象类
19 class Animal extends ACanEat {
20   public function eat($food){
21     echo "Animal eating " . $food . "
";
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方法

  所以,抽象类其实就是介于普通类和接口之间的一个类,普通类需要实现所有方法,接口所有方法都不需要实现,而抽象类可以根据自己的需要去选择实现部分方法;但是一旦类里面有抽象方法,这个类就必须是抽象类,另外注意,抽象类跟接口一样,不能直接实例化为对象,只能被普通类继承,,其实抽象类同样体现了面向对象的多态现象

原文地址:https://www.cnblogs.com/freeweb/p/4643055.html