上一篇: php多态Polymorphi*
下一篇: 自动加载和魔术方法
当定义一个类时,常常需要定义一些方法来描述该类的行为特征,但有时这些方法的实现方式是无法确定的,此时就可以使用抽象类和接口。抽象类和接口用于*程序灵活性,抽象类是一个特殊的类,而接口又是一种特殊的抽象类。
当定义一个类的时候,其中所需要的某些方法暂时不能*定义出来,而是让其继承的类实现,此时就可以用到抽象类。比如,定义一个动物类,每种动物有一个叫的方法。而每种动物叫法不同,因此可以将动物的定义为一个抽象类。
定义抽象类需要使用abstract关键字来修饰,语法格式具体如下
abstract class 类名{
//类成员
}
由于每种动物叫的方式不同,所以需要将动物的shout()方法定位成抽象,即只有方法声明而没有方法体的方法,在子类继承时在来编写该方法的具体实现,这种特殊的方法称为抽象方法,其语法格式如下
abstract function 方法名();案例
<?php
//使用abstract关键字声明一个抽象类
abstract class animal{
//在抽象类中声明抽象方法
abstract public function shout();
}
//定义dog类继承自animal类
class dog extends animal{
//实现抽象方法shout()
public function shout(){
echo "dog叫:汪汪……<br>";
}
}
//定义cat类继承自animal类
class cat extends animal{
public function shout(){
echo "cat叫:喵喵……<br>";
}
}
$dog1=new dog();
$dog1->shout();
$cat1=new cat();
$cat1->shout();
?>
运行结果
定义一个抽象类animal,然后使dog类和cat类继承animal类并实现抽象方法shout(),*后调用cat对象和dog对象的shout()方法,输出不同的叫声
注意:
如果一个抽象类中的所有的方法都是抽象的,则可以将这个类用另外一种方式来定义,即接口。在定义接口时,需要使用interface关键字,具体代码如下
interface animal{
public function run();
public function breathe();
}
定义接口与定一个标准的类相似,但其中定义的所有方法都是空的。需要注意的是接口中的所有方法都是公有的,也不能使用final关键字来修饰
由于接口定义的都是抽象方法,没有具体实现,需要通过类来实现接口,接口使用implements关键字
案例
<?php
//定义animal类
interface animal{
public function run();
public function shout();
}
//定义dog类,实现了animal接口
class dog implements animal{
public function run(){
echo "狗在奔跑<br>";
}
public function shout(){
echo "汪汪……<br>";
}
}
//定义cat类实现animal接口
class cat implements animal{
public function run(){
echo "猫在跳<br>";
}
public function shout(){
echo "喵喵……<br>";
}
}
$cat1=new cat();
$cat1->run();
$cat1->shout();
$dog1=new dog();
$dog1->run();
$dog1->shout();
?>
运行结果
在PHP中类是单继承的,但一个类却可以实现多个接口,并且这些接口之间用逗号分隔开
案例
<?php
//定义animal接口
interface animal{
public function run();
public function shout();
}
//定义LandAnimal接口
interface LandAnimal{
public function LifeLand();
}
class dog implements animal,LandAnimal{
public function LifeLand(){
echo"狗生活在陆地上<br>";
}
public function run(){
echo "狗在奔跑<br>";
}
public function shout(){
echo "汪汪……<br>";
}
}
$dog1=new dog();
$dog1->LifeLand();
$dog1->run();
$dog1->shout();
?>
运行结果
上一篇: php多态Polymorphi*
下一篇: 自动加载和魔术方法
*声明:接口与抽象类的7个区别内容来源于网络收集和整理,版权归原著所有,如来源信息有误或侵犯权益,请联系站长作修改和删除处理。