博客列表 >PHP中抽象类与接口类的异同

PHP中抽象类与接口类的异同

力挽狂澜的博客
力挽狂澜的博客原创
2018年05月17日 00:32:29732浏览

相同的地方

  1. 都不能实例化

  2. 都有通过定义方法而不实现的特征来规范子类的作用,继承或实现的子类的访问权限不能比其更私密,必须是相同或者更宽松的访问权限


不同的地方

  1. 接口类只能被接口类继承extends,被其他类[抽象类或普通类]实现implments,抽象类不能被任何类实现implements,只能被[抽象类或普通类]继承extends

  2. 接口类的方法访问权限只能是public,抽象类的方法的访问权限不能是private

  3. 接口类只定义方法和类常量,抽象类还可以定义属性

  4. 抽象类只定义不能实现的方法,抽象类还可以定义有具体实现的方法


个人总结:

  1. 两者都是起规范子类作用的

  2. 接口更倾向于规范行为,抽象类更倾向于抽象类别[可以定义成员属性的原因]

  3. 因为访问权限的区别以及继承和实现的特性,接口主要是规范对外完全开放的行为[必须public的方法定义],抽象类可以选择性的对外开放或对外关闭并对内限制[protected的抽象方法]

  4. 接口更像是规范或协议书,抽象类更像是基于规范的demo或模板


建议编码的方式是

//逻辑
if(完全对外开放的规范){
    declare interface
    use abstract implements interface
    use class extends abstract
}else{
    declare abstract
    use class extends abstract
}

参考

  1. 类相关的关键字 - abstract

  2. 类相关的关键字 - interface

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议