在学习设计模式时,经常用到抽象类和接口,但似乎自己对这些概念是有一点模糊的,于是拿出来重新复习下。
先来说下抽象类,抽象类是父类的模版,通过定义一个抽象类,可以指明类的一般行为,一个抽象类定义了接口:这个基类的继承类如何被使用,然后子类负责这些接口的实现。
抽象类和普通类的最大区别在于,如果试图从抽象类创建一个对象,将会出现一个致命错误。
抽象类用关键字abstract定义。
在扩展的类里实现抽象方法的时候,其可见性必须高于或等于抽象方法定义的可见性,方法的实现版本也必须要和抽象方法的定义具有一样数目的参数,如果一个类哪怕只有一个抽象方法,那么这个类本身也应该是抽象类。和属性一样,抽象方法需要被派生类继承。
接口,像抽象类一样,定义必须被特定类定义的功能接口。
接口和抽象类的区别:抽象类和它的继承类之间有一种“是一个”is a的关系,接口和它的继承类之间有一个“有相同行为”的关系。一个抽象类意味着会被扩展为一个特定的类,一个接口不能被一个类继承。
接口中所有的方法必须是公开的即public的,接口只是定义了方法,但是没有包括属性。
定义接口使用关键字interface,php的类不能从多个父类继承,但是可以实现多个接口,使用逗号分隔。
instanceof操作符可以被用于测试是否一个类实现了一个接口。