你必须了解PHP中什么是抽象类和抽象方法

在之前的文章中给大家带来了《五分钟带你看PHP中的接口interface声明与应用(实例详解)》,其中详细介绍了PHP接口的声明与应用问题,本篇我们来看一下PHP中的抽象类和抽象方法,希望对大家有所帮助!

在之前的文章中给大家带来了《五分钟带你看PHP中的接口interface声明与应用(实例详解)》,其中详细介绍了PHP接口的声明与应用问题,本篇我们来看一下PHP中的抽象类和抽象方法,希望对大家有所帮助!

你必须了解PHP中什么是抽象类和抽象方法

php入门到就业线上直播课:进入学习API 文档、设计、调试、自动化测试一体化协作工具:点击使用

在上一篇文章中介绍了接口,其中讲到了可以把接口理解成一个特殊的抽象类,那么什么是抽象类,想要了解什么是抽象类我们首先要讲什么是抽象方法,抽象类和抽象方法的出现,主要还是想方便类的继承,那接下来我们就来看一下什么是抽象方法,什么是抽象类。

什么是抽象方法

在我们之前的学习中,一个类可以有多个子类,我们定义抽象方法就是为了方便类的继承。我们类里面定义的没有方法体的方法就是抽象法。那么什么是方法体?方法体指的就是类声明的时候大括号以及大括号其中的内容,没有方法体指的就是没有这个内容,而是直接在声明的时候放法明后加上分号结束。这就叫做抽象方法。

需要注意的是,抽象方法在声明的时候要通过关键字“abstract”来进行修饰。它的语法格式如下:

abstract 访问权限修饰符 function 方法名1(参数列表);
abstract 访问权限修饰符 function 方法名2(参数列表);登录后复制

抽象方法的理解还是比较简单的,接下来我们看一下什么是抽象类。

什么是抽象类

通过上文已经知道了什么是抽象方法,那么抽象类的定义其实也很好理解,当一个类的里面有一个方法是抽象方法的时候,我们定义这个类就是抽象类。同时抽象类也是需要使用“abstract”关键字来修饰的,在抽象类里面可以有不是抽象方法的成员属性,但是一旦有一个方法是抽象方法,那这个类就是抽象类。

其中需要注意的是,抽象类的成员方法并不全是抽象方法,哪些不是抽象方法的成员方法和属性访问权限不能是private,抽象类中的方法也是需要被子类继承的。

下面给大家实例看一下:

abstract class demo{
var $test;
abstract function fun1();
abstract function fun2();
}登录后复制

抽象类的特点

  • 抽象类和抽象方法都需要用abstract修饰;

  • 抽象方法必须在抽象类中,抽象类中可以没有抽象方法;

  • 抽象类不能直接创造对象(实例化);

  • 抽象类的子类如果重写所有抽象方法,那么就是一个具体的类;抽象类的子类不重写所有抽象方法,那么子类还是一个抽象类;

抽象类中含有不能被实现的抽象方法,就表示抽象类不能被实例化,那就创建不了对象,因此我们无法直接使用它。那既然无法直接使用它,我们使用抽象类能够解决什么问题呢?

接下来我们通过实例来看一下,定义一个抽象类,然后使用另一个类来继承这个抽象类并实现抽象类中的抽象方法。

示例如下:

study.$this -> study1;
}
}
$obj = new Demo();
$obj -> output();
$obj -> title();
?>登录后复制

输出结果:

你必须了解PHP中什么是抽象类和抽象方法

由上述实例,我们实现了定义一个抽象类,然后使用另一个类来继承这个抽象类并实现抽象类中的抽象方法。

就像上文说的,前面的文章中讲到了PHP接口的相关知识,里面说道可以把接口理解成一个特殊的抽象类,那么既然特殊的话PHP接口和抽象类有什么区别和相同点呢?下面我们就来盘点一下。这里推荐大家可以先看《五分钟带你看PHP中的接口interface声明与应用(实例详解)》其中介绍了PHP接口。

PHP接口和抽象类的区别

  • 抽象类可以有属性、普通方法、抽象方法,但接口不能有属性、普通方法、可以有常量。

  • 抽象类内未必有抽象方法,但接口内一定会有“抽象”方法。

  • 抽象类用abstract关键字在类前声明,且有class声明为类,接口是用interface来声明,但不能用class来声明,因为接口不是类。

  • 抽象类是用extends关键字让子类继承父类后,在子类实现详细的抽象方法。而接口则是用implements让普通类在类里实现接口的详细方法,且接口可以一次性实现多个方法,用逗号分开各个接口就可。

PHP接口和抽象类的相同点

  • 都是用于声明某一种事物,规范名称、参数,形成模块,未有详细的实现细节。

  • 都是通过类来实现相关的细节工作。

  • 语法上,抽象类的抽象方法与接口一样,不能有方法体,即{}符号。

  • 都可以用继承,接口可以继承接口形成新的接口,抽象类可以继承抽象类从而形成新的抽象类。

大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。

抽象类的作用是什么?

原创2020-11-30 11:33:5021098 + php学习QQ群(点击入群)

抽象类是用来捕捉子类的通用特性的,是被用来创建继承层级里子类的模板。现实中有些父类中的方法确实没有必要写,因为各个子类中的这个方法肯定会有不同;而写成抽象类,这样看代码时,就知道这是抽象方法,而知道这个方法是在子类中实现的,所以有提示作用。

你必须了解PHP中什么是抽象类和抽象方法

程序员必备接口测试调试工具:立即使用
Apipost = Postman + Swagger + Mock + Jmeter
Api设计、调试、文档、自动化测试工具
后端、前端、测试,同时在线协作,内容实时同步

一、什么是抽象类

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

二、为什么要用抽象类?抽象类有什么用?

老是在想为什么要引用抽象类,一般类不就够用了吗。一般类里定义的方法,子类也可以覆盖,没必要定义成抽象的啊。

其实不是说抽象类有什么用,一般类确实也能满足应用,但是现实中确实有些父类中的方法确实没有必要写,因为各个子类中的这个方法肯定会有不同,所以没有必要再父类里写。当然你也可以把抽象类都写成非抽象类,但是这样没有必要。

而写成抽象类,这样别人看到你的代码,或你看到别人的代码,你就会注意抽象方法,而知道这个方法是在子类中实现的,所以,有个提示作用。

三、抽象类和接口的区别

抽象类

抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。

接口

接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。

抽象类和接口的对比

你必须了解PHP中什么是抽象类和抽象方法

什么时候使用抽象类和接口

  • 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
  • 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
  • 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
  • 假如有一个接口,五个实现类,现在的需求可能要往接口加一个方法,这样就要改动五个实现类,但需求只需要改动其中两个实现类,可以再定义一个抽象类去实现这个接口,在抽象类中新增这个方法,然后其他两个实现类实现这个抽象类就好了,或者使用 Java 8 中的新特性,在接口中新增默认方法或者静态方法。

更多编程相关知识,请访问:编程学习!!

以上就是抽象类的作用是什么?的详细内容,更多请关注钦钦技术栈其它相关文章!

转载至:php中文网【www.php.cn】

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/27299/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022-09-29 5:11:55
下一篇 2022-09-29 5:12:51

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!