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 相关文章推荐
在MongoDB中模拟Auto Increment的php代码
Mar 06 PHP
PHP学习之数组的定义和填充
Apr 17 PHP
表格展示无限级分类(PHP版)
Aug 21 PHP
php无限分类且支持输出树状图的详细介绍
Jun 19 PHP
php使用curl抓取qq空间的访客信息示例
Feb 28 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
Dec 15 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
Dec 29 PHP
Yii2实现自定义独立验证器的方法
May 05 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
Oct 23 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
Apr 12 PHP
laravel Validator ajax返回错误信息的方法
Sep 29 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
Oct 04 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 cli 小技巧
2013/06/03 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
PHP命名空间用法实例分析
2019/09/04 PHP
js DOM模型操作
2009/12/28 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
jquery实现拖动效果
2016/08/10 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
js实现带三角符的手风琴效果
2017/03/01 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
Angular中的interceptors拦截器
2017/06/25 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
JavaScript中关于class的调用方法
2017/11/28 Javascript
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
小程序清理本地缓存的方法
2018/08/17 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
javascript中call()、apply()的区别
2019/03/21 Javascript
[05:24]TI9采访——教练
2019/08/24 DOTA
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
Python连接Impala实现步骤解析
2020/08/04 Python
Python中过滤字符串列表的方法
2020/12/22 Python
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
前台领班岗位职责
2013/12/04 职场文书
培训演讲稿范文
2014/01/12 职场文书
会计专业大学生求职信范文
2014/01/28 职场文书
怀念母亲教学反思
2014/04/28 职场文书
五月的鲜花活动方案
2014/08/21 职场文书
助学金感谢信
2015/01/20 职场文书
《钓鱼的启示》教学反思
2016/02/18 职场文书
MySQL中order by的使用详情
2021/11/17 MySQL
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android