php抽象类,接口,特性的比较

php抽象类

  • 抽象方法必须被子类继承实现,所以不能为私有,只能是受保护的或公有的;
  • 抽象类子类的方法访问控制级别必须和抽象类相等或更宽松。例如,父类的抽象方法是受保护的,子类实现时则必须为受保护的或者公有的;
  • 抽象方法的实现,必传参数的数量和类型必须严格一致;
  • 抽象类的非抽象方法,子类可不实现,等同于普通类方法的继承;
  • 抽象类中的抽象方法,只能定义,不能实现其方法体;
  • 抽象类可定义常量,且可被子类覆盖;

接口

  • 接口类可以通过extend继承一个或多个接口类,多个接口之间用逗号分隔,用以实现接口类的扩充;
  • 接口类定义的方法必须声明为公有,因此子类的实现方法也只能为公有;
  • 接口方法体必须为空;
  • 接口类定义的常量和类常量私用方式一样,但不能被子类或者子接口覆盖;
  • 普通类通过关键字implements来实现一个或多个接口;
  • 继承多个接口,方法不能有重名;
  • 普通类继承接口,必须实现接口类里面所有的方法,参数也和接口方法定义相同;
  • 可加默认参数,这点和抽象类方法的实现基本一致;

特性

  • 特性与普通类相似,有自己的方法,属性,但不能通过extends继承,也没有类常量;
  • 特性的方法如果和当前类方法冲突,会被当前类的方法覆盖(优先级:当前类>特性类>基类);
  • 一个类加载了多个特性,当多个特性中方法有重名时,需要在代码中通过关键字insteadof设置优先级或通过as关键字重命名处理,否则报错;
posted @ 2021-01-04 09:04  绝技小嗨皮  阅读(130)  评论(0编辑  收藏  举报
Title