💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
相同的地方 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](http://www.php.cn/blog/detail/6597.html "类相关的关键字 - abstract") 2. [类相关的关键字 - interface](http://www.php.cn/blog/detail/6579.html "类相关的关键字 - interface")