php抽象类和接口的区别

抽象类和接口的关系:抽象类是一种特殊的类,接口是一种特殊的抽象类

抽象类

什么是抽象方法:如果一个类中的方法,没有方法体的方法就是抽象方法(就是一个方法没有使用{},而直接使用分号结束)

例如:abstract function test(); //抽象方法

如果一个方法是抽象方法,就必须使用abstract修饰

什么是抽象类:
  1.如果一个类中有一个方法是抽象的,那这个类就是抽象类
  2.如果一个类是抽象类,那么这个类必须要使用abstract修饰
  3.抽象类是一种特殊的类,就是因为类中至少有一个抽象方法,其他不变,也可以在抽象类中声明成员属性,产量,非抽象的方法
  4.抽象类不能实例化方法
  
  抽象类的作用:要使用抽象类,就必须使用一个类继承抽象类,而且要使用这个子类,也就是让子类可以创建对象,子类就不能是抽象类了,子类可以重写父类的方法(给抽象方法加上方法体)
  抽象方法中的方法没有方法体,子类必须实现这个方法(父类中没写具体的实现,但是子类必须要有这个方法名),就是在定义一些规范,让子类按照这个规范实现自己的功能
  目的:就是要将你自己写的程序模块假如到原来写好的程序中去(别人写好的程序,不能等你开发完一个小模块,根据你的小模块继续向下开发)

接口

接口和抽象类的作用是一样的
因为php是单继承的,如果使用抽象类,子类实现完抽象类就不能继承其他的类了,如果即想实现一些规范,又想继承其他的类,那么就要使用接口
接口和抽象类的对比:
1,作用相同,都不能创建对象,需要子类去实现
2,接口的声明用(interface)和抽象类(abstract)不一样
3,接口被实现的方法不一样
4,接口中所有方法都必须是抽象方法(不能使用abstract)
5,接口中的成员属性智能声明常量不能声明变量
6,接口中的成员访问权限都必须要是public,抽象类中的权限是public,protected
7,使用一个类继承接口要用implements而不是用extents,可以使用抽象类去实现接口中的部分方法,如果让子类可以创建对象,则必须实现接口中的所有抽象方法,如果子类是重写父类接口中的抽象方法,则使用Implements (类---接口,抽象类---接口  都使用 implements,接口---接口 extends)
8.一个类可以实现多个接口(按多个规范去开发子类),使用逗号分隔多个接口名称,一个类在继承一个类的同时可以去实现一个或多个接口(先继承再实现)

使用implements的两个目的

1.可以实现多个接口,而extends只能继承一个

2.没有使用extends,可以去继承一个类,所以两个可以同时使用