php面向对象全攻略 (十二) 抽象方法和抽象类


Posted in PHP onSeptember 30, 2009

抽象方法和抽象类
在OOP 语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法做为
外部代码访问其的接口。而抽象方法就是为了方便继承而引入的,我们先来看一下抽象类和
抽象方法的定义再说明它的用途。
什么是抽象方法?我们在类里面定义的没有方法体的方法就是抽象方法,所谓的没有方
法体指的是,在方法声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后
加上分号结束,另外在声明抽象方法时还要加一个关键字“abstract”来修饰;
例如:
abstract function fun1();
abstract function fun2();
上例是就是“abstract”修饰的没有方法体的抽象方法“fun1()”和“fun2()”,不要忘记
抽象方法后面还要有一个分号;那么什么是抽象类呢?只要一个类里面有一个方法是抽象方
法,那么这个类就要定义为抽象类,抽象类也要使用“abstract”关键字来修饰;在抽象类里
面可以有不是抽象的方法和成员属性,但只要有一个方法是抽象的方法,这个类就必须声明
为抽象类,使用“abstract”来修饰。
例如:
代码片段

abstract class Demo{ 
var $test; 
abstract function fun1(); 
abstract function fun2(); 
function fun3(){ 
… . 
} 
}

上例中定义了一个抽象类“Demo”使用了“abstract”来修饰,在这个类里面定义了一
个成员属性“$test”,和两个抽象方法“fun1”和“fun2”还有一个非抽象的方法fun3();那
么抽象类我们怎么使用呢?最重要的一点就是抽象类不能产生实例对象,所以也不能直接使
用,前面我们多次提到过类不能直接使用,我们使用的是通过类实例化出来的对象,那么抽
象类不能产生实例对象我们声明抽象类有什么用呢?我们是将抽象方法是做为子类重载的模
板使用的,定义抽象类就相当于定义了一种规范,这种规范要求子类去遵守,子类继函抽象
类之后,把抽象类里面的抽象方法按照子类的需要实现。子类必须把父类中的抽象方法全部
都实现,否则子类中还存在抽象方法,那么子类还是抽象类,还是不能实例化对;为什么我
们非要从抽象类中继承呢?因为有的时候我们要实现一些功能就必须从抽象类中继承,否则
这些功能你就实现不了,如果继承了抽象类,就要实现类其中的抽象方法;
代码片段
<? 
abstract class Demo{ 
var $test; 
abstract function fun1(); 
abstract function fun2(); 
function fun3(){ 
… . 
} 
} 
$demo=new Demo(); //抽象类为能产生实例对象,所以这样做是错的,实例化对象交给子类 
class Test extends Demo{ 
function fun1(){ 
… 
} 
function fun2(){ 
… 
} 
} 
$test=new Test(); //子类可以实例化对象,因为实现了父类中所有抽象方法 
?>
PHP 相关文章推荐
人尽可用的Windows技巧小贴士之下篇
Mar 22 PHP
PHP之生成GIF动画的实现方法
Jun 07 PHP
php上传图片存入数据库示例分享
Mar 11 PHP
简单的php新闻发布系统教程
May 09 PHP
PHP使用PDO连接ACCESS数据库
Mar 05 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 PHP
PHP 实现的将图片转换为TXT
Oct 21 PHP
php封装的表单验证类完整实例
Oct 19 PHP
visual studio code 调试php方法(图文详解)
Sep 15 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
Nov 03 PHP
PHP基础之输出缓冲区基本概念、原理分析
Jun 19 PHP
PHP实现字母数字混合验证码功能
Jul 11 PHP
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
Sep 30 #PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 #PHP
php面向对象全攻略 (九)访问类型
Sep 30 #PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 #PHP
php面向对象全攻略 (七) 继承性
Sep 30 #PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
Sep 30 #PHP
php面向对象全攻略 (五) 封装性
Sep 30 #PHP
You might like
用php写的serv-u的web申请账号的程序
2006/10/09 PHP
基于PHP的cURL快速入门教程 (小偷采集程序)
2011/06/02 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
解决File size limit exceeded 错误的方法
2013/06/14 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
jQuery 对象中的类数组操作
2009/04/27 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
vue中mint-ui的使用方法
2018/04/04 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
2018/08/07 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
python使用range函数计算一组数和的方法
2015/05/07 Python
Django日志模块logging的配置详解
2017/02/14 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
OpenCV-Python 摄像头实时检测人脸代码实例
2019/04/30 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
python常用运维脚本实例小结
2020/02/14 Python
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
会计师职业生涯规划范文
2014/02/18 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
解除合同协议书范本
2016/03/21 职场文书
SQL SERVER存储过程用法详解
2022/02/24 SQL Server
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏