深入分析php中接口与抽象类的区别


Posted in PHP onJune 08, 2013

接口和抽象类真的很难区分开,引文他们很相似,方法都没有定义逻辑,都是供子类是想或继承的。区分二者只要记住一句话:接口是规范,类是实现。接口的目的是定义一个规范,大家都遵守这个规范。

也就是说,从目的上可以很清楚地区分接口和抽象类。那么还是有疑问,既然有了借口,那么为什么还必须有抽象类呢?

加入我们要定义一个名为Animal的类,该类有两个子集Dog和Cattle,二者都有两个方法:run()方法和speak()方法。

假定Dog和Cattle的“跑(run)”是相同的,因此run()方法具有相同的业务逻辑;而“叫(speak)”是不同的,因此speak()方法的业务逻辑不同。而且,有一个IAnimal的接口规定必须有这两个方法,这意味着Animal类必须实现这两个方法,同样,Dog和Cattle这两个子类也必须有这两个方法吗,那么我们可以这样定义:

<?php
interface IAnimal{
 public function run();
 public function speak();
}
class Animal implements IAnimal{
 public function run(){
  //在这里可以添加一些相同的run逻辑
  return "same run<br />";
 }
 public function speak(){
  //这里可以添加一些相同的speak逻辑
  return "same speak<br />";
 }
}
class Dog extends Animal{
 public function speak(){
  //在这里可以添加一些Dog逻辑
  return "Dog speak<br />";
 }
}
class Cattle extends Animal{
 public function speak(){
  //在这里可以添加一些Cattle逻辑
  return "Cattle speak<br />";
 }
}
$oDog=new Dog();
echo($oDog->run());
echo($oDog->speak());
$oCattle=new Cattle();
echo($oCattle->run());
echo($oCattle->speak());
?>

PHP 相关文章推荐
那些年一起学习的PHP(二)
Mar 21 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
PHP static局部静态变量和全局静态变量总结
Mar 02 PHP
护卫神php套件 php版本升级方法(php5.5.24)
May 10 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 PHP
WordPress中调试缩略图的相关PHP函数使用解析
Jan 07 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
Dec 21 PHP
PHP实现微信退款的方法示例
Mar 26 PHP
Laravel5.1 框架控制器基础用法实例分析
Jan 04 PHP
PHP实现简单日历类编写
Aug 28 PHP
PHP重载基础知识回顾
Sep 10 PHP
探讨PHP中this,self,parent的区别详解
Jun 08 #PHP
深入php self与$this的详解
Jun 08 #PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
Jun 07 #PHP
解析dedeCMS验证码的实现代码
Jun 07 #PHP
探讨php中header的用法详解
Jun 07 #PHP
php简单浏览目录内容的实现代码
Jun 07 #PHP
php之XML转数组函数的详解
Jun 07 #PHP
You might like
PHP实现加密的几种方式介绍
2015/02/22 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
chrome浏览器不支持onmouseleave事件的解决技巧
2013/05/31 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
五步轻松实现zTree的使用
2017/11/01 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
浅析JS中回调函数及用法
2018/07/25 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
关于Python中浮点数精度处理的技巧总结
2017/08/10 Python
浅析Python四种数据类型
2018/09/26 Python
详解Python是如何实现issubclass的
2019/07/24 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
Python实现不规则图形填充的思路
2020/02/02 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
毕业生自荐书
2013/12/18 职场文书
拓展策划方案
2014/06/03 职场文书
学校四群教育实施方案
2014/06/12 职场文书
关于运动会广播稿200字
2014/10/08 职场文书
学习作风建设心得体会
2014/10/22 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
教师岗位职责
2015/02/03 职场文书
销售员岗位职责
2015/02/10 职场文书
教你用Python matplotlib库制作简单的动画
2021/06/11 Python
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python