PHP抽象类与接口的区别详解


Posted in PHP onMarch 21, 2019

对于面向对象开发,抽象类与接口这两个东西是比较难理解的;就算是对于有一定经验的程序员来说也如此。下面根据自己的理解来讲述一下这两个东西,如有什么不对的,还望不吝赐教。

抽象类:是基于类来说,其本身就是类,只是一种特殊的类,不能直接实例,可以在类里定义方法,属性。类似于模版,规范后让子类实现详细功能。

接口:主要基于方法的规范,有点像抽象类里的抽象方法,只是其相对于抽象方法来说,更加独立。可让某个类通过组合多个方法来形成新的类。

抽象类与接口的相同点:

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

2、都是通过类来实现相关的细节工作

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

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

抽象类与接口的不同点:

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

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

3、语法上有不同

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

5、抽象类的抽象方法一定要用abstract来声明,而接口则不需要

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

各自的特点:

抽象类内未必有抽象方法,但有抽象方法的类,则必是抽象类

抽象类内,即便全是具体方法,也不能够实例化,只要新建类来继承后,实例继承类才可以

接口可以让一个类一次性实现多个不同的方法

接口本身就是抽象的,但注意不是抽象类,因为接口不是类,只是其方法是抽象的。所以,其也是抽象的

应用与结合:

以下的代码是基于自己的思考,未在实际开发中应用,只是这种写法有点奇特。让抽象与接口结合起来。

一、抽象类与接口的结合

<?php 
/* 
写此程序源于自己的猜测,想在抽象类里实现某一接口。 
*/ 
interface work{ 
  public function say(); 
}
abstract class a implements work{ 
  public function showlove(){ 
    echo 'love you<br />'; 
  } 
}
class b extends a{ 
  public function say(){ 
    echo 'hello, i m in b'; 
  } 
}
$k=new b(); 
$k->say();
/* 
以上程序能正常执行
普通类implements接口后,就变成了抽象类了,这就好像是直接给抽象类增加了一个抽象方法。
*/

二、接口与继承的结合

父类是普通类,子类继承后,同时在子类里实现接口。

疑问:这样的做法是否有意义,在实际开发中是否有这样的应用?

<?php
interface kk{ 
  public function say(); 
}
class a { 
  public function show(){ 
    echo '我是父类<br />'; 
  } 
}
class b extends a implements kk{ 
  public function say(){ 
    echo '我是继承A类,同时实现say接口的<br />'; 
  }
}
$b=new b(); 
$b->show();//我是父类
$b->say();//我是继承A类,同时实现say接口的

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
在mysql数据库原有字段后增加新内容
Nov 26 PHP
兼容firefox,chrome的网页灰度效果
Aug 08 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
php实现批量压缩图片文件大小的脚本
Jul 04 PHP
php向js函数传参的几种方法
Aug 10 PHP
PHP也能干大事 随机函数
Apr 14 PHP
php根据一个给定范围和步进生成数组的方法
Jun 19 PHP
PHP在线书签系统分享
Jan 04 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
Mar 20 PHP
详解php用curl调用接口方法,get和post两种方式
Jan 13 PHP
PHP之认识(二)关于Traits的用法详解
Apr 11 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
May 27 PHP
PHP CURL使用详解
Mar 21 #PHP
使用ucenter实现多站点同步登录的讲解
Mar 21 #PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 #PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
Mar 21 #PHP
启用OPCache提高PHP程序性能的方法
Mar 21 #PHP
Discuz不使用插件实现简单的打赏功能
Mar 21 #PHP
PHP+RabbitMQ实现消息队列的完整代码
Mar 20 #PHP
You might like
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
php购物车实现方法
2015/01/03 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
2019/04/22 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
python使用sqlite3时游标使用方法
2018/03/13 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
python实现朴素贝叶斯算法
2018/11/19 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
windows、linux下打包Python3程序详细方法
2020/03/17 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
Python基于locals返回作用域字典
2020/10/17 Python
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
民主评议党员自我评议范文2014
2014/09/26 职场文书
个人四风问题整改措施
2014/10/24 职场文书
初婚未育证明样本
2015/06/18 职场文书
详解Python牛顿插值法
2021/05/11 Python
Mysql中存储引擎的区别及比较
2021/06/04 MySQL
python 对图片进行简单的处理
2021/06/23 Python
我收到了德劲DE1107
2022/04/05 无线电