设为首页 | 加入收藏
PHP
心如止水
网络编程
育儿心经
成长经历
心如止水 首页 > 心如止水 > PHP

抽象类和接口的区别

所属类别:PHP 发布者: 心如止水 来源:喜气妍妍 发布时间:2013-07-07 08:54:39

抽象类和接口的区别,在很多网站上都有详细讲解。我这里就不多作解析,我这里仅对其做归纳性总结。

 

抽象类是一种特殊类,除了具有普通类所有的特性外,抽象类可以有抽象方法,抽象类不可以直接实例化。
抽象类中可以定义子类需要的方法,也可以实现部分方法。
抽象类中可以定义实例变量(成员变量)

接口只定义功能(方法),不能包含实现的内容
接口只能声明public方法,不能声明实例变量(成员变量)
接口不仅仅是一个类,而更是一个规范、协议

抽象类和接口都是抽象类,都不能实例化。
子类都必须实现抽象方法
子类只能继承一个抽象类(extends),却可以实现N个接口(implements)
接口强调特定功能的实现(like “A”),而抽象类强调所属关系(is “A”)
接口中的抽象方法默认是public的,也只能是public的,不能用private、protected修饰符修饰。而抽象类中的抽象方法则可以用public、protected来修饰,但不能用private。
接口没有构造函数,抽象类可以有构造函数


接口(interface)的应用的场合
类与类之间需要特定的接口进行协调,而不在乎其如何实现。
作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。
需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系
需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。

抽象类(abstract class)的应用场合
在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。
定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用 abstract class 定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。
某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。 abstract 的中介作用可以很好地满足这一点。
规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特 定的功能 。
 

总结:
在许多情况下,如果你不用刻意表达属性上的继承的话,接口和抽象类是可以相互替代的.

接口和抽象类的作用从本质上是一样的,就是规定一些共同的方法.只要某个类是继承自某个抽象类或者实现了多个接口,则其必须完全实现接口和抽象类中的所有抽象方法.之所以两者可以共存,是因为只支持单一类继承,但可以实现多个接口以实现类似多重继承的功能.

标签: 抽象类 ; 接口 ;

100% 0% 欢迎顶踩!
        8 票                 0
顶 踩
看过本文的所有网友评论:
我也来评论几句:
验证码: 请输入右边图片上的字母或数字(不区分大小写);看不清,请直接点击图片即可换一张