抽象类、扩展类、实例化类

1.抽象类

使用关键字:abstract

没有为它所声明的所以方法定义实现的内容(即函数体),可将抽象类看作部分类。抽象类可以不实现所有方法,它具有定义抽象方法(即为,只有声明,没有函数体的方法)的能力。当抽象类被继承时,这些方法将会被实现。换言之,在继承抽象类的扩展类中,同名方法带有函数体。另外,抽象类中,也可以定义除抽象方法以外的、具有函数体的完整方法。

//定义一个抽象类Car
abstract class Car{
    abstract function getMaximumSpeed();
}

在类的声明中使用abstract修饰符,就可以将某个类声明为抽象的。

说明:public function abc();即为方法声明,是方法的定义中,剔除了方法体之后的签名,这个声明称为方法的原型。

2.继承类

使用关键字:extends

这里只讲继承抽象类的继承类。

继承类,也就是扩展类。它能继承父类的方法和部分变量,并使用。

继承抽象类的继承类(扩展类)必须将抽象类中的抽象方法具体完整地实现(即写出函数体)。

//定义一个扩展抽象类的类FastCar
class FastCar extends Car{
    public function getMaximumSpeed(){
        return 150;
    }
}

再定义一个类,使用抽象类提供的公共功能

//使用抽象类提供的公共功能
class Street{
    protected $speedLimit;
    protected $cars;
    
    public function __construct($speedLimit=200){
        $this->cars=array();
        $this->speedLimit= $speedLimit;
    }
    
    protected function isStreetLegal($car){
        if ($car->getMaximumSpeed()< $this->speedLimit ) {
            return true;
        }else{
            return false;
        }
    }
    
    public function addCar($car){
        if($this->isStreetLegal($car)){
        	echo 'The car was allowed on the road.';
            $this->cars[]=$car;
        }else{
        	echo 'The car is too fast and was not allowed on the road.';
        }
    }
}

3.实例化

使用关键字:new

实例化的形式

$abc=new abc();

调用的形式

$abc->XXX();

注意:抽象类不能被实例化,因为其中的抽象方法没有函数体。所以只有通过实例化抽象类的扩展类来使用抽象类中的方法。

    $street=new Street;
    $fastCar=new FastCar;
    $street->addCar($fastCar);

======完整代码=======

 1 <?php
 2 //定义一个抽象类Car
 3 abstract class Car{
 4     abstract function getMaximumSpeed();
 5 }
 6 
 7 //定义一个扩展抽象类的类FastCar
 8 class FastCar extends Car{
 9     public function getMaximumSpeed(){
10         return 150;
11     }
12 }
13 
14 //使用抽象类提供的公共功能
15 class Street{
16     protected $speedLimit;
17     protected $cars;
18     
19     public function __construct($speedLimit=200){
20         $this->cars=array();
21         $this->speedLimit= $speedLimit;
22     }
23     
24     protected function isStreetLegal($car){
25         if ($car->getMaximumSpeed()< $this->speedLimit ) {
26             return true;
27         }else{
28             return false;
29         }
30     }
31     
32     public function addCar($car){
33         if($this->isStreetLegal($car)){
34             echo 'The car was allowed on the road.';
35             $this->cars[]=$car;
36         }else{
37             echo 'The car is too fast and was not allowed on the road.';
38         }
39     }
40 }
41     $street=new Street;
42     $fastCar=new FastCar;
43     $street->addCar($fastCar);
44 ?>
View Code

 

posted @ 2015-01-21 10:13  安迪9468  阅读(428)  评论(0编辑  收藏  举报