抽象类继承实例
<?php
//定义抽象类,关键字abstract
abstract class Shape {
public $width ;
public $heigth ;
//调用length1方法,初始化变量
function length1($width,$heigth){
$this->width = $width;
$this->heigth = $heigth;
}
abstract public function area();
}
class Rectangle extends Shape{
//继承Shape,自动获得属性$width,$heigth,方法length1()
//c重写area方法
function area (){
//返回面积
return (($this->width * $this->heigth)/2);
}
}
//创建rea实例
$rec = new Rectangle;
//给属性赋值
$rec->length1(20,30);
echo $rec->width."<br>";
echo $rec->heigth."<br>";
//输出rec面积
echo $rec->area();
接口与多态
<?php
//定义接口,关键字interface
interface Shape {
function area();
function perimeter();
}
//实现Shape,
class Rectangle implements Shape{
public $width;
public $heigth;
function length1($width,$heigth){
$this->width = $width;
$this->heigth = $heigth;
}
//重写area方法
function area (){
//返回面积
echo "长方形面积:".($this->width * $this->heigth)/2 . "<br>";
}
//重写perimeter方法
function perimeter(){
//返回周长
echo "长方形周长:".(($this->width + $this->heigth) * 2). "<br>";
}
}
//实现Shape,
class Circle implements Shape{
public $radius ;
//重写area方法
function area (){
//返回面积
echo "圆的面积:".($this->radius) **2 * M_PI . "<br>";
}
//重写perimeter方法
function perimeter(){
//返回周长
echo "圆的周长:". ($this->radius) *2 * M_PI . "<br>";
}
}
//判断对象类型,如果是Shape,执行对应的方法,实现多态
function change($obj){
if($obj instanceof Shape){
$obj->area();
$obj->perimeter();
}else{
echo "传入的参数不是一个正确的Shape对象";
}
}
//创建Rectangle实例
$rec = new Rectangle;
//给属性赋值
$rec->length1(20,30);
//创建Circle 对象
$cir = new Circle;
$cir->radius = 5 ;
//调用change方法,实现多态
change($rec);
change($cir);
总结
- 继承,可以将一些类的相似成员抽取出来到父类,子类通过继承得到这部分成员,实现代码简化和复用,子类重写父类方法,修饰符权限必须大于等于对应的父类方法。私有成员无法继承得到。
- 抽象类,不能被实例化,抽象类可以有自己的属性和普通方法,可以对公有成员进行一些操作
- 接口,PHP只支持单继承,但是可以多实现接口,是抽象类的一个特例,也是对继承的补充。
- final 在特定的类前面,表示此类不能被继承,在方法前面,表示该方法不能被重写。