抽象类和接口的区别

2015-04-26 derekchan 更多博文 » 博客 » GitHub »

php,抽象类,接口

原文链接 http://gitdc.com/2015/04/26/abstract-interface.html
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


这两个星期,朋友结婚、公司活动、任务、岗位线座谈会,忙得不可开交,趁着周末,让自己闲下来写篇博文。回想起我在看设计模式的时候,经常看到书上经常会用到静态类和接口,但却不了解抽象类和接口的区别,俗话说,不了解透彻就无法运用到实际场景上(PS:这俗话当然是我自己编的~_~),那它们两者的区别在哪呢?

1、命名方式

抽象类:用abstract前缀做类的类型

接口:用interface前缀做类的类型

2、继承方式

抽象类:跟普通继承一样,用extends

接口:用implements

一个类只能继承一个抽象类,但能实现多个接口

3、构造

抽象类:跟普通的类一样有构造函数

接口:没有构造函数

接口中的方法默认都是public类型的,而抽象类中的方法可以使用private,protected,public来修饰。

4、使用

抽象类:适合作为基类使用,比如一些子类相同的行为可以封装在抽象类,进行调用。举个例子:教师、警察、学生都是人,那么他们就可以继承“人”这个抽象类,从而可以使用“人”这个抽象类里的所有行为。

接口:适合定义类的规范,比如一些类的功能是一样的,只是逻辑方面不同,就可以实现相对应的接口,这样可以规范化这些类,让后来的开发者知道这些规范。