相同的地方
都不能实例化
都有通过定义方法而不实现的特征来规范子类的作用,继承或实现的子类的访问权限不能比其更私密,必须是相同或者更宽松的访问权限
不同的地方
接口类只能被接口类继承extends,被其他类[抽象类或普通类]实现implments,抽象类不能被任何类实现implements,只能被[抽象类或普通类]继承extends
接口类的方法访问权限只能是public,抽象类的方法的访问权限不能是private
接口类只定义方法和类常量,抽象类还可以定义属性
抽象类只定义不能实现的方法,抽象类还可以定义有具体实现的方法
个人总结:
两者都是起规范子类作用的
接口更倾向于规范行为,抽象类更倾向于抽象类别[可以定义成员属性的原因]
因为访问权限的区别以及继承和实现的特性,接口主要是规范对外完全开放的行为[必须public的方法定义],抽象类可以选择性的对外开放或对外关闭并对内限制[protected的抽象方法]
接口更像是规范或协议书,抽象类更像是基于规范的demo或模板
建议编码的方式是
//逻辑 if(完全对外开放的规范){ declare interface use abstract implements interface use class extends abstract }else{ declare abstract use class extends abstract }
参考