抽象类是使用abstract关键字声明的类。通过将某个类标记为抽象类,可以推迟实现所声明的方法。要将某个方法生命为抽象方法,只需要省略掉包含所有大括号的方法实现体,将方法声明的代码行用分号结束即可。
抽象类不能直接被实例化,他们必须被继承。如果某个类从抽象类继承,当它没有实现基类中所声明的所有抽象方法时,它就必须被声明为抽象的。
在接口中,也可以声明没有方法体的方法原型,这点与抽象类很相似。它们之间的区别在于,接口不能声明任何具有方法体的方法;并且它们使用的语法也不一样。为了将接口规则强制加到某个类上,需要使用implements关键字,而不是使用extends关键字。
在某些情况下,我们希望确定某个类是否特定的类型,或者是否实现了特定的接口。instanceof操作符非常适合完成这个任务。instanceof操作符检查三件事情:实例是否某个特定的类型,实例是否从某个特定的类型继承,实例或者他的任何祖先类是否实现了特定的接口。
某些语言具有从多个基类继承的能力,这成为多重继承。PHP不支持多重继承。相反,它提供了为一个类声明多个接口的功能。
接口在声明类必须遵循的规则是非常有用。契约式编程技术使用这一功能来增强封装性,优化工作流程。