PHP中抽象类和接口的区别

最近在读PHP文档,发现网上的说法和文档的说法不一致,手动实践后发现文档当然是正确的,
所以结合文档,做下总结

抽象类(extends继承 abstract定义)

  1. 抽象类不能被直接实例化
  2. 抽象类里有0个或多个抽象方法
  3. 抽象方法只能声明调用方式,不能定义实现方式
  4. 子类必须实现所有父抽象类的抽象方法,且访问控制和父类一样或更宽松,且调用方式一致(参数数量和类型)
  5. 构造方法同样适用4

接口(extends接口继承 interface定义 implements类继承)

  1. 接口中定义的方法都为空,继承接口的类必须实现所有方法
  2. 不能被直接实例化
  3. 接口中所有方法都是public
  4. 允许构造方法
  5. 可以定义常量和类常量,但是不可以被子类或子接口覆盖

相同点

  1. 不能被直接实例化
  2. 抽象方法必要在子类里实现,且参数类型和数量一致

不同点

  1. 接口可以定义常量和类常量,抽象类没限制
  2. 抽象类里的抽象方法不能是private,接口中的抽象方法只能是public
  3. 关键词不同
  4. 继承数量不同
  5. 抽象类可以继承接口和抽象类,而不实现其中的抽象方法

应用场景
接口:实现一组功能,功能之间不相互依赖,比如PHP的数组函数等
抽象类:类和类之间有关联,有公用的方法,又有自己特定的功能

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概念 面向对象的三大概念:封装,继承,多态 ;把属性和方法封装起来就是类。 一个类的属性和方法被另外...
    BULL_DEBUG阅读 2,000评论 0 1
  • 先看官方文档中的定义:抽象类:PHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面...
    daos阅读 2,857评论 0 1
  • 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法...
    薛延祥阅读 452评论 0 1
  • 5月26日 晴 太极拳从哪里开始练呢? 拳架? 不是,是从马步、实步、虚步开始练的。 在太极拳整套拳架中,这三种算...
    悟道阅读 443评论 0 1
  • 这里是一面围墙,外面的人想进来,里面的人想出去——题记 在奋斗了几个月后,终于结束了省考。公考,考的是耐力,考的是...
    沙茶敏姐碎碎念阅读 771评论 1 5

友情链接更多精彩内容