php高级篇(1)——抽象类

定义 :

定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。 这也适用于 PHP 5.4 起的构造函数。在 PHP 5.4 之前的构造函数声明可以不一样的。

注意:

1. 抽象方法实现的访问级别必须小于抽象类中的方法

2. 不能被实例化(不能用new来创建对象)

3. 被生命方法不能包含函数体

4. 扩展类也为抽象类,就不用实现所有的抽象函数

例子:

//shape为图形类,FourSidesShape为正方形,TreeSidesShape为三角形


//include_once("constant.php");

//shape为图形类,FourSidesShape为正方形,TreeSidesShape为三角形

abstract class Shape {

abstract public function getArea();

abstract public function getLength();

public function getType(){

}

}

class FourSidesShape extends Shape{

private $width;

private $heigth;

public function __construct($width,$height){

$this->width = $width;

$this->height = $height;

}

public function getArea(){

$area = $this->width * $this->height;

echo "面积:".$area;

}

public function getLength(){

$length = ($this->width+$this->height)*2;

echo "周长:".$length;

}

}

abstract class TreeSidesShape extends Shape{

}

/*试着new 一个 Shape,是否成功

$shape = new Shape();

*/

/*

1 试着注释掉 getArea方法

2 将getArea方法变为私有

3 将Shape类中getArea加一个空函数体

4 注释掉 Shape类中的 getArea 和 getLength方法

5

*/

/* 成功例子*/

$fShape = new FourSidesShape(10,20);

$fShape->getArea();

// $sShape = new TreeSidesShape();

你可能感兴趣的:(php高级篇(1)——抽象类)