PHP抽象类是什么?与接口的区别在哪里?
什么是 PHP 抽象类?它与用户界面有何不同?什么是抽象类? 如果子类继承抽象类或者子类本身是抽象类或者实现所有抽象方法 抽象类的目的是为了规范子类,一般用在比较大或者标准化的项目中 成员属性不允许抽象类
private
修饰符,由于抽象类无法实例化,所以私有成员无关紧要。 abstract
还可以修改方法,将其称为抽象方法:抽象方法所在的类必须是抽象类,并且抽象方法不能有方法体<?php
// 抽象类 abstract
abstract class Human{
// 普通方法
public function show(){}
// 抽象方法,抽象方法存在的类必须是抽象类
// 抽象方法不能有方法体
public abstract function eat();
};
// 抽象类不能被实例化
// new Human();
// 继承抽象类的要么为抽象类,要么实现抽象类的所有抽象方法。
class Man extends Human{
// 实现抽象方法 eat
public function eat(){}
};
// 可以正常实例化
new Man();
// 抽象子类继承抽象类
abstract class Woman extends Human{
public abstract function makeup();
}
abstract class Wo extends demo{
// 实现抽象方法 eat
public function eat(){}
// 实现抽象方法 makeup
public function makeup(){}
}
// 只有实现了抽象类和继承的抽象类的所有所有抽象方法,才可以实例化
new Wo();
复制代码
什么是用户界面?
PHP 是单一继承。为了解决这个问题,PHP 引入了接口。接口是一种特殊的抽象类,抽象类是一种特殊的类。
- 接口不是类,但它们具有与类类似的结构,并且它们的目的是约束类。
- 接口无法实例化,但类可以 实现接口(注意是实现,而不是继承)
<?php
interface 接口名{}
class 类名 implements 接口名{}
复制代码
- 接口用于规范项目的系统定义,提供必要的行为规范。 接口成员: 在接口内部定义的成员
- 接口成员只能有两种类型
- 接口常量:
const 公共方法和静态方法。 接口方法是抽象方法,而不是方法体(不需要
abstract
关键字,因为接口方法是抽象方法) - 实现接口的类:持久化接口:常量不能被重写
- 所有用户接口方法都必须启用(除非是抽象类)
- 接口方法实现不得增加控制权(必须是public)
- 接口常量:
- 接口成员:只能定义通用抽象方法和接口常量接口
<?php interface Humen{ // 接口常量 const NAME = '人'; // 接口抽象方法 public function eat(); public static function show(); } 复制代码
- 接口成员方法必须在子类中实现或者该类是抽象类。接口常量可以直接在实现类中使用。
// 实现接口:实体类 class Man implements Humen{ // 必须实现接口里的所有的抽象方法 public function eat(){ // 可以访问常量 echo self::NAME; } public static function show(){} } // 实现接口:抽象类 abstract class Women implements Humen{}; 复制代码
- 当类实现接口成员时,不允许重写接口常量和添加接口方法。控制权限
class Women implements Humen{ // 不允许重写接口常量 const NAME = '小孩'; // 不允许使用其他访问修饰符,必须使用public private function eat(); }; 复制代码
接口继承: 接口可以被接口继承
- 接口继承的目的
- 实现用户界面成员的扩展,从而丰富用户界面内容,从而丰富用户界面内容。 要形成一个完整的接口体系,让不同层次的类实现不同层次的接口,保证实现的规范通常是一个抽象类,实现用户界面,添加必要的成员属性,然后让实际的业务类继承抽象类
- 该类可以在继承其他类的同时实现对应的接口不需要父类与接口之间的关系
接口与抽象的区别
- 抽象类可以有非抽象方法,而接口只能有抽象方法,而抽象类s有关键字继承。
- 抽象类中可以声明成员变量,接口中不能声明成员变量,但可以声明常量。
- 接口没有构造函数,但抽象类可以有构造函数。
- 接口的抽象方法只能用public方法修改,而构造函数可以用public和protected方法修改。
- 应该使用抽象方法。 摘要可编辑,无需用户界面
作者:两双筷子
链接:https://juejin.im/post/686905503
版权属于所有人作者的财产。商业转载请联系作者获得许可。非商业转载请注明出处。
- 接口成员只能有两种类型
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。