最近在读PHP文档,发现网上的说法和文档的说法不一致,手动实践后发现文档当然是正确的,
所以结合文档,做下总结
抽象类(extends继承 abstract定义)
- 抽象类不能被直接实例化
- 抽象类里有0个或多个抽象方法
- 抽象方法只能声明调用方式,不能定义实现方式
- 子类必须实现所有父抽象类的抽象方法,且访问控制和父类一样或更宽松,且调用方式一致(参数数量和类型)
- 构造方法同样适用4
接口(extends接口继承 interface定义 implements类继承)
- 接口中定义的方法都为空,继承接口的类必须实现所有方法
- 不能被直接实例化
- 接口中所有方法都是public
- 允许构造方法
- 可以定义常量和类常量,但是不可以被子类或子接口覆盖
相同点
- 不能被直接实例化
- 抽象方法必要在子类里实现,且参数类型和数量一致
不同点
- 接口可以定义常量和类常量,抽象类没限制
- 抽象类里的抽象方法不能是private,接口中的抽象方法只能是public
- 关键词不同
- 继承数量不同
- 抽象类可以继承接口和抽象类,而不实现其中的抽象方法
应用场景
接口:实现一组功能,功能之间不相互依赖,比如PHP的数组函数等
抽象类:类和类之间有关联,有公用的方法,又有自己特定的功能
网友评论