一.特点:
1、抽象类特点
(1) 用 abstract 来修饰一个类,那么这个类就是抽象类;抽象类绝对不能被实例化,即$abc = new 抽象类名();会报错。(2) 用abstract 来修饰一个方法,那么该方法就是抽象方法;(3) 如果类中有一个抽象方法,那么该类就必须定义为抽象类;但反过来,抽象类里并不一定要有抽象方法。另外,抽象类里也可以有普通方法。(4) 抽象方法不能有方法体。即abstract function abc();------后面不能加大括号{.........}。(5)、一个类继承了某个抽象类,那么,它必须实现抽象类中所有的抽象方法(除非,它也这些抽象方法声明为抽象的,相当于抽象类继承了抽象类)。2、接口的特点
(1) 接口的方法必须是公开的。(2) 接口的方法默认是抽象的,所以不在方法名前面加abstract。(3) 接口可以定义常量,但不能定义成员属性,常量的定义和用法和类中常量一样。(4) 类可以实现多个接口(用逗号隔开)(5) 接口也可以继承接口。
二. 区别:
1、对接口的使用是通过关键字implements。对抽象类的使用是通过关键字extends。当然接口也可以通过关键字extends继承。
2、接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。
3、接口没有构造函数,抽象类可以有构造函数。
4、接口中的方法默认都是public类型的,而抽象类中的方法可以使用PRivate,protected,public来修饰。
5、一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。
三 .选择:
四.示例:
abstract class people{var $name;abstract function sayName();}interface mother{function beautiful();}interface father{function clever();}class son extends people implements mother,father{function beautiful(){echo "i'm very beautiful!";}function clever(){echo "i'm very clever!";}function __construct($name){$this->name = $name;}function sayName(){echo $this->name;}}$zww = new son("Tom");$zww->beautiful();$zww->clever();$zww->sayName();
输出结果:i'm very beautiful!i'm very clever!Tom