PHP中抽象类和接口的区别

2019-11-26  本文已影响0人  乔四儿丶

最近在读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的数组函数等
抽象类:类和类之间有关联,有公用的方法,又有自己特定的功能

上一篇 下一篇

猜你喜欢

热点阅读